【发布时间】:2010-07-30 22:55:57
【问题描述】:
我的应用程序有 2 个角色:编辑者和管理员。我希望编辑者拥有一些权限,而管理员拥有所有编辑者权限以及一些其他权限。
这是我ability.rb的摘录
class Ability
include CanCan::Ability
def initialize(user)
if user.is_admin?
can :edit, Post
end
if user.is_editor?
can :edit, Post, :created_by_id => user.id
can :read, Post
end
end
end
由于所有管理员也是编辑者,我希望这将定义这些权限:
- 管理员可以阅读和编辑所有帖子
- 编辑者可以阅读所有帖子,但只能修改他们创建的帖子
但是,CanCan 似乎没有附加地定义权限——即,当 CanCan 看到用户是编辑者(即使用户也是管理员),它会应用更严格的权限(即can :edit, Post, :created_by_id => user.id 而不是can :edit, Post)。
有没有办法解决这个问题?显而易见的解决方案需要重复代码:
class Ability
include CanCan::Ability
def initialize(user)
if user.is_admin?
can :edit, Post
can :read, Post # NOT DRY!!!
elsif user.is_editor?
can :edit, Post, :created_by_id => user.id
can :read, Post
end
end
end
【问题讨论】:
标签: ruby-on-rails cancan