Не уверен, правильно ли я все понял, что нужно в конечном итоге, но реализовать можно следующим образом:
Если хочется заморачиваться и писать собственную авторизацию, то как это с нуля сделать хорошо описано тут:
Если лень, то можно использоваться гем 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% все как нужно.