Как проверить на роль - PullRequest
0 голосов
/ 21 января 2010

Я здесь - rails noob и впервые публикуюсь и использую декларативную авторизацию для реализации ограничения доступа к ролевой базе в небольшом приложении с расписанием, которое я пишу.

В одном из моих представлений, в частности, index.html.erb для моих time_registers должен отображать больше информации, если пользователю, вошедшему в систему, назначена роль администратора.

В начале я просто проверял, что пользователь будет с идентификатором == 1

<% if @current_user.id == 1 %>

но теперь я хотел бы иметь возможность не ограничивать его для пользователя с id == 1, но позволить любому пользователю, которому назначена роль администратора, просматривать немного больше в файле index.html.erb.

Немного о том, как настраивается модель с декларативным_авторизацией

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

Ну, я не уверен, что еще понадобится, чтобы ответить на этот вопрос, поэтому не стесняйтесь запрашивать дополнительную информацию.

1 Ответ

3 голосов
/ 21 января 2010

ОК, так что я посмотрел пример и ничего не нашел по этому поводу. Но после проверки API снова я нашел то, что сработало.

Я обменял все экземпляры

<% if @current_user.id == 1 %>

для

<% if has_role?(:admin) %>

На тот случай, если кто-то захочет получить помощь по этой же проблеме, ниже приведена страница API, где я обнаружил вышеупомянутую функцию:

http://www.tzi.org/~sbartsch/declarative_authorization/master/

Там нет большого описания, но, глядя на источник, можно увидеть, что он проверяет, есть ли у текущего пользователя определенная роль, переданная функции. Вот как я решил использовать эту функцию напрямую.

Интересно, является ли то, что я делаю, правильным способом реализации страницы администратора, или мне, возможно, следует реализовать представление администратора отдельно от представления для обычных пользователей, а не в том же файле ?? До сих пор я не нашел никаких дискуссий о том, как это сделать.

...