【发布时间】:2012-02-07 19:48:23
【问题描述】:
当用户不是特定角色时,我需要在表单中隐藏一些表单字段。那怎么可能呢?从我知道的文档中,您可以授予对某些操作的访问权限,例如显示、更新或仅管理
但是如何做类似 if user.role 的事情? :管理员
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 cancan
当用户不是特定角色时,我需要在表单中隐藏一些表单字段。那怎么可能呢?从我知道的文档中,您可以授予对某些操作的访问权限,例如显示、更新或仅管理
但是如何做类似 if user.role 的事情? :管理员
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 cancan
if cannot? :manage ,Articles
flash[:notice] = "you are not authorized to manage articles"
end
【讨论】:
如果你想通过 cancan 来做这一切,这一切都取决于你如何设置你的能力。考虑到这一点,如果用户拥有完全权限,您可以使用:
<% if can? :manage, :all %>
<%= f.text_field :field_name %>
<% end %>
否则,您可以更具体并指定用户需要具有喜欢的权限的基本模型/操作:
<% if can? :update, Profile %>
<%= f.text_field :field_name %>
<% end %>
【讨论】:
这个答案主要是从CanCan documentation复制而来的。
首先,您定义一个Ability class。您可以使用以下方法生成其中之一:
rails g cancan:ability
这应该会给你类似的东西:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end
在这个类中,您可以定义您希望用户拥有的任何能力。在上面的示例中,管理员可以管理任何对象。非管理员或未登录的用户可以读取任何对象。
定义能力后,您需要使用can? 方法check your abilities。在您看来,您可以编写如下内容:
<% if can? :create, Project %>
<!-- your form view logic goes here -->
<% end %>
【讨论】:
你可以使用:
<% if user.admin? %>
<!-- form field -->
<% elsif user.editor? %>
<!-- another form field -->
<% end %>
【讨论】: