根据角色隐藏或显示CanCan的内容?

时间:2012-02-07 19:48:23

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 cancan

当用户不是某个角色时,我需要在表单中隐藏一些表单字段。怎么可能这样呢?从我知道的文档中,您可以访问某些操作,例如show,update或just manage

但是如果像user.role那样做怎么办? :admin

4 个答案:

答案 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 %>