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表中。
答案 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