ролевая политика rails

программирование ruby ruby on rails rails

Всем добрый день!
Итак есть веб-приложение, написанное мною. Оно пока маленькое и не серьезное, но хочу развивать. Стоит задача сделать разграничение прав для пользователей. Покапался в разных плагинах аутентификации и понял, могу ошибаться, что все они не реализуют разграничение прав пользователей на проведение то или иной операции. Наткнулся на запись в блоге (адрес потерян и поисковый запрос забыт), где человек описывает как раз таки создание такого разграничения. Но описано там все скудно и не понятно.
Может кто-то объяснить, как можно сделать подобное на rails?
p.s.
"в детстве" делал такое на ПХП, но оооооооочень тупо. В таблице у Users был столбец принадлежности к определенной группе, и когда пользователь логинился тупо брал запись из таблицы и смотрел, к какой группе пользователь относится ну и потом в коде делал проверку: может пользователь сделать это действие или нет. Очень тупо, соглашусь, но на тот момент друго выхода я не видел.
сейчас же не имею представления, как это же сделать в rails.

Примечание:
уже после того как разместил вопрос прочитал его... в предложении:
" Покапался в разных плагинах аутентификации и понял, могу ошибаться, что все они не реализуют разграничение прав пользователей на проведение то или иной операции" - имел ввиду:
Все плагины (могу ошибаться) тупо дают пользователю право на "вход" в приложение или нет. А мне нужно, чтобы в зависимости к какой группе пользователей относиться пользователь, у него "появлялись" те или иные операции.

Примечание:
нашел вот такой туториал
http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/
застрял вот на чем:
после установки cancan (не совсем понимаю что это за такой гем и что он делает), автор советует создать HABTM roles relationship (как мне сказал google, это связи принадлежности ко многим) и пишет что миграция должна выглядить примерно так:
class CreateRoles < ActiveRecord::Migration
def self.up
create_table :roles do |t|
t.string :name
t.timestamps
end
end

def self.down
drop_table :roles
end
end

class UsersHaveAndBelongToManyRoles < ActiveRecord::Migration
def self.up
create_table :roles_users, :id => false do |t|
t.references :role, :user
end
end

def self.down
drop_table :roles_users
end
end
вопрос как раз таки насчет этих двух классов: какой тип имеет класс Roles и какой UsersHaveAndBelongToManyRoles ? или я все не правильно понимаю и это просто дополнительные записи в файл миграции? просто этот момент автор опускает, видимо должно быть и так ясно, но я чето не понимаю)

Примечание:
Антон Витальевич (Антон Дьячук), спасибо за подсказки, уже во всем разобрался!
Ответы:
А как интересно по другому. Пользователь должен принадлежать к группе (или иметь какой либо ключ) , и действие должно быть разрешено или запрещено группе. Это самый простой способ, и главное рабочий. Группу записать в сессии и проверять везде, какая она.
тупой метод
if user.role == 'admin'
unless user.role == 'admin'
или
if user.is_admin?
канкан по сути реализует то что вы "ну ооооооооочень тупо" делали на пхп, но с дополнительными плюшками
ничего нового не изобретено
пользователи делятся на роли, и эти роли нужно сравнивать с правилами и привелегиями каждый раз когда от ролей что-то зависит
#2
это просто дополнительные миграции


13 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.