我是一个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
嗯,我不确定还有什么需要回答这个问题,所以请随时索取更多信息。
答案 0 :(得分:3)
好的,所以我看了一下这个例子并没有找到任何关于此的内容。但在再次检查API之后,我确实发现了一些有效的方法。
我交换了
的所有实例<% if @current_user.id == 1 %>
代表
<% if has_role?(:admin) %>
万一有人碰巧想要帮助解决同样的问题,以下是我在API中找到上述功能的页面:
http://www.tzi.org/~sbartsch/declarative_authorization/master/
对它没有太多描述,但是查看源代码可以看到它检查当前用户是否具有传递给该函数的特定角色。这就是我想直接使用这个功能的方法。
我想知道我在做什么实际上是实现管理页面的正确方法,或者我是否应该实现与普通用户的视图分开的管理视图而不是在同一个文件中?到目前为止,我还没有找到关于如何做到这一点的讨论。