Good Afternoon All,
我正在尝试整理用户身份验证并让自己头疼。
我有一个:在用户中定义的role_type,我的用户有两个角色,雇主或开发人员,现在我的用户当前是开发人员,应该能够看到作业#index但它不能和我得到未经授权的默认cancan消息:
class JobsController < ApplicationController
load_and_authorize_resource
before_filter :authenticate_user!
before_action :set_job, only: [:show, :edit, :update, :destroy]
这是Ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
can :create, :delete, :update, Job if user.role_type == "Employer"
can :read, Job if user.role_type == "Developer"
end
end
感谢您的帮助。
答案 0 :(得分:1)
如评论中所述:确保您没有像“雇主”而非“雇主”这样的拼写错误: - )
答案 1 :(得分:0)
我假设user.role_type == 'Employer'
查看您的代码,看起来雇主错过了:read
操作。
如果Employer
可以管理所有工作(基本的粗暴行为),您可能需要考虑给予他:manage
能力
示例:
can :manage, Job if user.role_type == "Employer"
can :read, Job if user.role_type == "Developer"
:manage能力使用户可以访问JobsController中的每个动作。有关以下内容的说明,请参阅以下文档:管理能力:https://github.com/ryanb/cancan/wiki/defining-abilities#the-can-method
否则您需要将:read
操作添加到Employer
,因为它们不是Developer
,并且不会获得:read
操作