我想在我的 rails 应用程序中授予用户权限。我有可以创建、更新和删除所有帖子和评论的“管理员”,只能创建和更新自己的评论的“用户”,以及不能执行任何这些操作的“访客”。为此,我使用宝石“设计”和“康康康”。我了解“设计”宝石,但不了解“康康康”。
在类 ability.rb 中,如何为这些用户(admin、user、guest)编写权限?
我想在我的 rails 应用程序中授予用户权限。我有可以创建、更新和删除所有帖子和评论的“管理员”,只能创建和更新自己的评论的“用户”,以及不能执行任何这些操作的“访客”。为此,我使用宝石“设计”和“康康康”。我了解“设计”宝石,但不了解“康康康”。
在类 ability.rb 中,如何为这些用户(admin、user、guest)编写权限?
Cancancan
允许您仅定义给定上下文的权限。这个上下文可能是一个用户角色,它不是它的一部分,cancancan
因此角色必须由您自己定义。
有多种方式来定义用户角色,例如
这完全取决于用例。可以在此处找到如何定义能力的示例。在您的情况下,它看起来像:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.reviewer? #Just a logged user
can :manage, Comment, { owner_id: user.id }
elsif user.admin?
can :manage, :all
end
end
end
class User < ActiveRecord::Base
enum role: [ :reviewer, :admin ]
end
您可以参考以下 rails cast http://railscasts.com/episodes/192-authorization-with-cancan
如果您要使用角色,请考虑将 CanCanCan 与 RoleModel ( https://github.com/martinrehfeld/role_model ) 结合在一起的 Canard gem ( https://github.com/james2m/canard )。这为您提供了一种井井有条的方式来规定角色及其能力
例如,如果您有一个用户模型,您将按如下方式设置角色:
class User < ActiveRecord::Base
acts_as_user roles: [:supervisor, :manager, :writer]
end
然后您可以为每个角色创建能力文件,包括基本用户(未分配任何角色)和访客(未登录)
Canard::Abilities.for(:user) do
can :manage, User, id: user.id
cannot [:destroy], User
end
以上将允许用户更新自己的信息,但不允许他们删除自己。他们也将无权访问任何其他用户记录。