当用户不是某个角色时,我需要在表单中隐藏一些表单字段。怎么可能这样呢?从我知道的文档中,您可以访问某些操作,例如show,update或just manage
但是如果像user.role那样做怎么办? :admin
答案 0 :(得分:4)
if cannot? :manage ,Articles
flash[:notice] = "you are not authorized to manage articles"
end
答案 1 :(得分:4)
如果你想通过cancan来实现它,那将取决于你如何设置你的能力。考虑到这一点,如果用户具有完全权限,您可以使用:
<% if can? :manage, :all %>
<%= f.text_field :field_name %>
<% end %>
否则,您可以更具体,并指定用户需要具有这样权限的基本模型/操作:
<% if can? :update, Profile %>
<%= f.text_field :field_name %>
<% end %>
答案 2 :(得分:2)
这个答案主要是从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
在本课程中,您可以定义您希望用户拥有的任何能力。在上面的示例中,管理员可以管理任何对象。非管理员或未登录的用户可以读取任何对象。
在您定义了自己的能力之后,您需要check your abilities使用can?
方法。在您的视图中,您可以编写如下内容:
<% if can? :create, Project %>
<!-- your form view logic goes here -->
<% end %>
答案 3 :(得分:2)
您可以使用:
<% if user.admin? %>
<!-- form field -->
<% elsif user.editor? %>
<!-- another form field -->
<% end %>