我的应用程序有 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
由于所有管理员也是 editors,我希望这将定义这些权限:
- 管理员可以阅读和编辑所有帖子
- 编辑可以阅读所有帖子,但只能修改他们创建的帖子
但是,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