我有一个(相对)大型rails应用程序,它对基于角色的权限使用声明性授权。管理员用户目前拥有以下权限:
role :administrator do
has_omnipotence
end
我需要添加一个更高的角色(root),它可以专门对某些操作拥有权限。
显而易见的事情是从管理员角色块中删除 has_omnipotence 并手动添加所有控制器的所有权限,但 root_accounts ,但这很痛苦。有没有办法可以做以下的事情?
role :root do
has_permission_on [:root_accounts], :to => [:new, :create ... ]
end
role :administrator do
has_omnipotence {except [:root_accounts], :to => [:new, :create ...]}
end
答案 0 :(得分:0)
没有这样的语法。但您可以在视图/控制器中检查特定角色:
<% unless has_role?(:administrator) %>
<%= link_to 'New root account', new_root_account_path %>
<% end %>
或
def create
permission_denied if has_role?(:administrator)
...
end
它的可扩展性不高。