0

模型/能力.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user

    if user.role? :admin
      can :manage, :all
    else
      can :read, :all
      can :create, Comment
      can :update, Comment do |comment|
        comment.try(:user) == user || user.role?(:moderator)
      end
      if user.role?(:author)
        can :create, Article
        can :update, Article do |article|
          article.try(:user) == user
        end
      end
    end
  end
end

在 Railscasts 中有方法 user.role? :admin & if user.role?(:author).我不明白。我是否需要在模型中创建一个方法才能使其工作?

我将角色存储在用户表中作为角色列。

4

2 回答 2

0

是的,你需要自己写这个。但是,CanCan 项目有一个wiki 页面描述了如何执行此操作

wiki 的第一行说:

“CanCan 与您在用户模型中实现角色的方式是分离的,但是如何设置基本的基于角色的授权呢?”

请注意,我几乎完全不同意该页面上使用 a 的示例role_mask,但该页面仍然很好,应该会给您一些想法。

还有一个单独的角色模型示例,我个人更喜欢它。这取决于您要存储角色信息的位置。

于 2011-03-02T01:55:30.497 回答
0

如果您正在寻找即插即用的 gem,请查看声明式授权。Raynb 说他开发 Cancan 是因为 DA 对于这里的一些项目来说太过分了:http ://railscasts.com/episodes/192-authorization-with-cancan?autoplay=true

于 2011-07-16T16:58:58.513 回答