2012-03-01 2 views
0

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

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

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

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

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) 

ответ

2

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

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

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

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

Update

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

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 в cancan и просто покончить с моделью Permission.

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

Канкан 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/

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

+0

Так можно программировать интерфейс так админ возможность создавать новые роли и назначать разрешения с t изменение кода? – Phidelux

+0

Да. Канкан и большинство других авторских камней, вероятно, не будут мешать тому, как вы применяете разрешения. Я обновляю свой ответ с помощью коротких ссылок n ссылок. –

+0

Аведо, ответ не приемлем для вас? –

Смежные вопросы