скрыть или показать контент с помощью CanCan в зависимости от роли? - PullRequest
2 голосов
/ 07 февраля 2012

Мне нужно скрыть некоторые поля формы в форме, когда у пользователя нет определенной роли. Как это могло быть сделано? Из документов, которые я знаю, вы можете предоставить доступ к определенным действиям, таким как показ, обновление или просто управление

Но как сделать что-то вроде if user.role? : admin

Ответы [ 4 ]

4 голосов
/ 07 февраля 2012
  if cannot? :manage ,Articles
  flash[:notice] = "you are not authorized to manage articles"

  end
4 голосов
/ 08 февраля 2012

Если вы хотите сделать это с помощью cancan, все будет зависеть от того, как вы настроили свои способности.Имея это в виду, если у пользователя есть полные привилегии, вы можете просто использовать:

<% if can? :manage, :all %>
  <%= f.text_field :field_name %>
<% end %>

В противном случае вы можете быть более конкретным и указать базовую модель / действие, которое пользователь должен иметь для привилегий, например:

<% if can? :update, Profile %>
  <%= f.text_field :field_name %>
<% end %>
2 голосов
/ 08 февраля 2012

Вы можете использовать:

<% if user.admin? %>
  <!-- form field -->
<% elsif user.editor? %>
  <!-- another form field -->
<% end %>
2 голосов
/ 07 февраля 2012

Этот ответ в основном скопирован из документации CanCan .

Сначала вы определяете класс способностей .Вы можете сгенерировать один из них, используя:

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?,На ваш взгляд, вы можете написать что-то вроде:

<% if can? :create, Project %>
  <!-- your form view logic goes here -->
<% end %>
...