Динамический интерфейс авторизации Rails - PullRequest
0 голосов
/ 01 марта 2012

Я только начал разрабатывать с Ruby on Rails и ищу плагин динамической авторизации, который позволяет администратору связывать разрешения для ролей и ролей с пользователями.

Я нашел кое-что здесь в stackoverflow и внекоторые форумы, а также некоторые подкасты на railscasts.org, нацеленные на эту тему, но все они ссылаются на acl9, декларативное_авторизация, Aegis, restful acl или даже Authlogic, который является не авторизацией, а плагином аутентификации.Другие не предлагают необходимую функциональность.

Так может кто-нибудь сказать мне, возможно ли настроить веб-интерфейс с использованием ruby ​​на рельсах для администрирования пользовательских ролей?

Итак, пока яперенесли мою базу данных с помощью следующей миграции.

class AddRolesAndRightsTables < ActiveRecord::Migration
  def self.up
    create_table :roles_users do |t|
      t.integer :role_id
      t.integer :user_id 
    end

    create_table :roles do |t|
      t.string :name
    end

    create_table :rights_roles do |t|
      t.integer :right_id 
      t.integer :role_id
    end

    create_table :rights do |t|
      t.string :name
      t.string :controller
      t.string :action
    end
  end

  def self.down
    drop_table :roles_users
    drop_table :roles
    drop_table :rights_roles
    drop_table :rights
  end
end

И в дополнение к некоторым представлениям и действиям контроллера я добавил следующее действие в ApplicationController.

def check_authorization
  user = User.find(session[:user])
  unless user.roles.detect do |role|
    role.rights.select do |right|
      right.action == action_name && right.controller == self.class.controller_path
    end
  end

  redirect_back_or user
  flash[:notice] = "You are not authorized to view the page you requested."
  return false
end

Запуск Right.synchronize_with_controllers (см. блог-пост от Wolfman-Blog ), я получаю следующую ошибку.

syntax error, unexpected $end, expecting kEND (line 17 in application_controller)

1 Ответ

2 голосов
/ 01 марта 2012

Я предложу Райану Бэйту cancan. Мне потребовалось некоторое время, чтобы понять, как это работает, но это действительно стоит усилий, чтобы изучить.

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

Надеюсь, между authentication и authorzation также нет путаницы. Если вы хотите быстро создать интерфейс администратора, я предлагаю Active Admin .

В противном случае, возможно, более гибко использовать cancan и namespace контроллер администратора =)

Обновление

Чтобы получить простой интерфейс разрешений на основе ролей на основе cancan, где вы, вероятно, создаете роли и назначаете им разрешения.

User belongs_to Role

Role has_many Users
Role has_and_belongs_to_many Permissions

Permissions has_and_belongs_to_many Roles

Каждая запись Permission определяет модель и действие RESTful, которое вы можете с ней сделать.

Если вам нужно только определить роль, но ее разрешения являются статическими, я предлагаю вам просто записать их в Ability.rb на канкане и просто отказаться от модели Permission.

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

Cancan Railscast http://railscasts.com/episodes/192-authorization-with-cancan

Еще один замечательный учебник по Канкану http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/

Способности в БД: Cancan https://github.com/ryanb/cancan/wiki/Abilities-in-Database

...