Ruby on rails 在具有多个型号的rails4中,使用cancancan gem,是否仅向特定用户授予特定型号的访问权限?
我的rails 4应用程序中有5个模型,使用cancancan gem,我只想让特定用户访问特定模型 这意味着:Ruby on rails 在具有多个型号的rails4中,使用cancancan gem,是否仅向特定用户授予特定型号的访问权限?,ruby-on-rails,ruby,devise,cancancan,Ruby On Rails,Ruby,Devise,Cancancan,我的rails 4应用程序中有5个模型,使用cancancan gem,我只想让特定用户访问特定模型 这意味着: 允许user1访问1,2模型 允许用户2访问3,4模型 允许用户3访问所有模型 请指导我。你应该用它来完成。您可以使用分配特定角色来表示您的“用户1”或“用户2”,如下所示: user = User.find(1) user.add_role :limited_user_1 你的“用户3”可以访问任何东西,可以是管理员 user = User.find(3) user.add_
- 允许user1访问1,2模型
- 允许用户2访问3,4模型
- 允许用户3访问所有模型
user = User.find(1)
user.add_role :limited_user_1
你的“用户3”可以访问任何东西,可以是管理员
user = User.find(3)
user.add_role :admin
然后,只需检查用户
是否具有指定的角色
。在这种情况下,:管理
意味着用户
可以访问所有操作,例如:读取
,:创建
,:更新
,:销毁
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
elsif user.limited_user_1?
can :manage, :model_1
can :manage, :model_2
elsif user.limited_user_2?
can :manage, :model_3
can :manage, :model_4
end
end
end
Mike的答案的简单版本如下:
#app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
case user.role_id
when 1
can :read, Model
can :read, Model2
when 2
can :read, Model3
can :read, Model4
when 3
can, :manage, :all
end
end
end
您必须添加一种方法来定义
用户是否是1
、2
、3
等,这就是为什么Mike
建议rolify
没有真正意义的原因。用户无法“访问”模型。对你的应用程序发出请求的客户端与控制器交互。控制器将请求转换为模型层上的某种调用,这取决于您定义交互是什么。我认为这就是答案