在具有许多模型的 rails4 中,使用 cancancan gem,仅授予特定用户对特定模型的访问权限?
In rails4 having many models, using cancancan gem, grant access to specific user to a specific model only?
我的 rails 4 应用程序中有 5 个模型,使用 cancancan gem 我只想让特定用户访问特定模型。
这意味着:
允许用户1访问1,2模型
允许用户 2 访问 3,4 模型
允许用户 3 访问所有模型。
请指导我。
您应该使用 rolify with cancan to accomplish that. You can assign a certain role with rolify 来表示您的 "user 1" 或 "user 2",如下所示:
user = User.find(1)
user.add_role :limited_user_1
而您有权访问所有内容的 "user 3" 可以是管理员
user = User.find(3)
user.add_role :admin
然后使用 cancan 就像检查 user
是否具有指定的 role
一样简单。在这种情况下 :manage
表示 user
可以访问所有操作,例如 :read
、:create
、:update
、:destroy
.
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
您必须添加一种方法来定义 User
是否为 1
、2
、3
等,这就是 Mike
的原因建议 rolify
.
我的 rails 4 应用程序中有 5 个模型,使用 cancancan gem 我只想让特定用户访问特定模型。
这意味着:
允许用户1访问1,2模型
允许用户 2 访问 3,4 模型
允许用户 3 访问所有模型。
请指导我。
您应该使用 rolify with cancan to accomplish that. You can assign a certain role with rolify 来表示您的 "user 1" 或 "user 2",如下所示:
user = User.find(1)
user.add_role :limited_user_1
而您有权访问所有内容的 "user 3" 可以是管理员
user = User.find(3)
user.add_role :admin
然后使用 cancan 就像检查 user
是否具有指定的 role
一样简单。在这种情况下 :manage
表示 user
可以访问所有操作,例如 :read
、:create
、:update
、:destroy
.
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
您必须添加一种方法来定义 User
是否为 1
、2
、3
等,这就是 Mike
的原因建议 rolify
.