【问题标题】:declarative authorization has_(not)_permission_on声明性授权具有_(not)_ 权限
【发布时间】:2014-07-25 11:42:10
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    没有这样的语法。但是您可以在视图/控制器中检查特定角色:

    <% unless has_role?(:administrator) %>
      <%= link_to 'New root account', new_root_account_path %>
    <% end %>
    

    def create
      permission_denied if has_role?(:administrator)
      ...
    end
    

    它的可扩展性不是很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      相关资源
      最近更新 更多