@Neznaikin

"Пользовательские среды" в приложение Ruby on Rails?

Господа, подскажите новичку, каким образом можно создать "пользовательские среды"? Что я под этим понимаю. Зарегистрированный пользователь может добавлять (регистрировать) пользователей из своей админки, назначать им права разного уровня (автор, ревьювер, контент-менеджер). Т.е. чтобы внутри одного проекта можно было динамически создавать пользователей и назначать права другим пользователям.
Пример - Pivotal Tracker. Здесь можно добавить к каждому проекту пользователей, ограничивать их права. Нужно некое блеклое подобие.
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 2
anton9
@anton9
Люблю Ruby on Rails
Не уверен, правильно ли я все понял, что нужно в конечном итоге, но реализовать можно следующим образом:

Если хочется заморачиваться и писать собственную авторизацию, то как это с нуля сделать хорошо описано тут:


Если лень, то можно использоваться гем devise (https://github.com/plataformatec/devise) и при создании модели прописать ей дополнительное поле "роль".

Соответственно дальше создаете модель "Право".

rails generate model Permission edit:boolean view:boolean delete:boolean + что ещё на ум придет


Создаете has_and_belongs_to_many реляцию
rails generate model UserPermission user:references permission:references


Например у вас проект открывается сразу в edit-темплейте

=form_for @project do |f|
какой-то код
  =f.collection_select(:permission_ids, Permission.all, :id, :permission_title, {include_blank: false, :include_hidden => false, :selected => @project.permissions.map(&:id)}, { class: 'тут какой-то css', :multiple => true})


Если нужно ограничить права доступа только для этого проекта, то в модель UserPermission добавляем поле project_id
rails generate model UserPermission user:references permission:references project_id:integer


а в код формы
=form_for @project do |f|
какой-то код
  =f.collection_select(:permission_ids, Permission.all, :id, :permission_title, {include_blank: false, :include_hidden => false, :selected => @project.permissions.map(&:id)}, { class: 'тут какой-то css', :multiple => true})
  =f.fields_for :user_permission do |s|
    =s.hidden_field :project_id, value: @project.id


Код писался из головы, плюс не совсем уверен, что полностью понял проблему, так что прошу не линчевать, если не на 100% все как нужно.
Ответ написан
Комментировать
@Z0nd0R
Видимо речь идет про связку гемов Devise(авторизация) и CanCanCan(управление привелегиями)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы