我的应用程序有两个角色:编辑器和管理员。我希望编辑有一些权限,管理员要拥有所有编辑权限和一些其他权限。
以下是我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
答案 0 :(得分:2)
您是否尝试使用块进行授权?
can :edit, Post do |post|
post.created_by_id == user.id || user.is_admin?
end
if user.is_editor?
can :read, Post
end
答案 1 :(得分:0)
为什么不重新定义编辑别名?你也可以这样做:
can [:edit, :read], Post