声明性授权has_(not)_permission_on

时间:2014-07-25 11:42:11

标签: ruby-on-rails-3 declarative-authorization

我有一个(相对)大型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

1 个答案:

答案 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

它的可扩展性不高。