如何检查角色

时间:2010-01-21 15:31:34

标签: ruby-on-rails declarative-authorization

我是一个rails noob和第一次在这里发布海报并使用声明性授权,以便在我正在编写的小型时间表应用中实现角色基本访问限制。

在我的一个视图中,特别是我的time_registers的index.html.erb需要显示更多信息,如果登录的用户已分配了admin角色。

一开始我只是检查用户是id == 1

的用户
<% if @current_user.id == 1 %>

但现在我希望能够不将其限制为id == 1的用户,但允许任何已分配admin角色的用户在index.html.erb文件中查看更多内容。

使用declarative_authorization

设置模型的方法
class User < ActiveRecord::Base
  has_many :assignments

class Role < ActiveRecord::Base
  has_many :assignments
  has_many :users, :through => :assignment

class Assignment < ActiveRecord::Base
  belongs_to :user
  belongs_to :role

我的授权文件如下所示:

authorization do

  role :usuarios do
    has_permission_on :users, :to => [:index, :show, :new, :create, :edit, :update]
  end

  role :reghoras do
    has_permission_on :time_registers, :to => [:index, :show, :new, :create, :edit, :update]
    has_permission_on :users do
      to :show
      if_attribute :id => is {user.id}
    end
  end

  role :contactos do
    has_permission_on :contacts, :to => [:index, :show, :new, :create, :edit, :update]
    has_permission_on :users do
      to :show
      if_attribute :id => is {user.id}
    end
  end

  role :admin do
    has_permission_on :authorization_rules, :to => :read
    has_permission_on [:time_registers, :contacts, :users, :roles], :to => [:index, :show, :new, :create, :edit, :update, :destroy]
  end

  role :guest do
    has_permission_on [:time_registers, :contacts], :to => [:index, :show]
  end

end

嗯,我不确定还有什么需要回答这个问题,所以请随时索取更多信息。

1 个答案:

答案 0 :(得分:3)

好的,所以我看了一下这个例子并没有找到任何关于此的内容。但在再次检查API之后,我确实发现了一些有效的方法。

我交换了

的所有实例
<% if @current_user.id == 1 %>

代表

<% if has_role?(:admin) %>

万一有人碰巧想要帮助解决同样的问题,以下是我在API中找到上述功能的页面:

http://www.tzi.org/~sbartsch/declarative_authorization/master/

对它没有太多描述,但是查看源代码可以看到它检查当前用户是否具有传递给该函数的特定角色。这就是我想直接使用这个功能的方法。

我想知道我在做什么实际上是实现管理页面的正确方法,或者我是否应该实现与普通用户的视图分开的管理视图而不是在同一个文件中?到目前为止,我还没有找到关于如何做到这一点的讨论。