康康宝石简单的问题

时间:2011-03-02 00:41:00

标签: ruby-on-rails ruby-on-rails-3 cancan

模型/ ability.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)。我不明白。我是否需要在模型中创建一个方法才能使其工作?

我将角色列存储在Users表中。

2 个答案:

答案 0 :(得分:0)

是的,你需要自己写一下。但是,CanCan项目有一个wiki page describing how to do this

维基的第一行说:

  

“CanCan与你的方式脱钩了   在User模型中实现角色,但是   如何建立基于角色的基础   授权?“

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

还有Separate Role Model example,我个人更喜欢。这取决于您希望存储角色信息的位置。

答案 1 :(得分:0)

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