如何使用cancancan?

我想在我的rails应用程序中为用户授予权限。 我有’admin’可以创建,更新和删除所有post和评论,’user’可以创建和更新他自己的评论,’guest“谁也可以不做这些。 为此,我使用了gem’设计’和’cancancan’。 我理解’设计’gem,但我不明白’cancancan’。

在class ability.rb中,如何为这些用户(admin,user,guest)写权限?

Cancancan允许您仅定义给定上下文的权限。 此上下文可能是用户角色,它不是cancancan的一部分,因此角色必须由您自己定义。

有多种方法可以定义用户角色,例如

  • 作为Role模型,
  • Rails enum ,
  • 正如这里建议的,
  • 作为User模型的字符串属性。

这完全取决于用例。 可以在此处找到如何定义能力的示例。 在您的情况下,它看起来像:

 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 

您可以参考以下导轨http://railscasts.com/episodes/192-authorization-with-cancan

如果您打算使用角色,请考虑Canard gem( https://github.com/james2m/canard ),它将CanCanCan与RoleModel( https://github.com/martinrehfeld/role_model )结合在一起。 这为您提供了一种组织良好的方式来规定角色及其能力

例如,如果您有用户模型,则可以按如下方式设置角色:

 class User < ActiveRecord::Base acts_as_user roles: [:supervisor, :manager, :writer] end 

然后,您可以为每个角色创建Ability文件,包括基本用户(未分配任何角色)和Guest(未登录)

 Canard::Abilities.for(:user) do can :manage, User, id: user.id cannot [:destroy], User end 

以上将允许用户更新他们自己的信息,但不允许他们自己删除。 他们也无法访问任何其他用户记录。