0

我是 Rails 新手,也是第一次在这里发帖,我正在使用声明性授权来在我正在编写的一个小型时间表应用程序中实施角色基础访问限制。

在我的一种观点中,如果登录的用户分配了管理员角色,我的 time_registers 的 index.html.erb 需要显示更多信息。

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

<% if @current_user.id == 1 %>

但现在我希望能够不将其限制为 id==1 的用户,而是允许任何分配了管理员角色的用户在 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

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

4

1 回答 1

3

好的,所以我浏览了这个例子,没有发现任何关于这个的东西。但是在再次检查 API 之后,我确实发现了一些有用的东西。

我交换了所有实例

<% if @current_user.id == 1 %>

为了

<% if has_role?(:admin) %>

以防万一有人碰巧在同一问题上寻求帮助,以下是我在 API 中找到上述功能的页面:

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

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

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

于 2010-01-21T16:32:33.620 回答