2015-02-17 3 views
1

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

Моя цель - реализовать мелкозернистый контроль над тем, какие роли/группы (группы) пользователя, созданные из Rolify и контролируемые Pundit, имеют доступ к определенной категории, подкатегории или статье через консоль администратора Upmin. Категория/статья должна позволять нескольким пользователям/группам доступ к ее содержимому.

Ответ here демонстрирует определение роли для конкретного экземпляра модели, что приятно, но я также хотел бы иметь этот элемент управления из экземпляра модели через простую форму флажка в консоли приложений (Upmin_admin для тех, интересно).

Я прав, думая, что для создания этой функции не так уж много, кроме создания частичного экземпляра экземпляра категории/статьи в консоли администратора, в котором перечислены все роли/группы и их текущие настройки CRUD для этого конкретный экземпляр категории/статьи. Или мне не хватает нескольких промежуточных шагов?

Подсказка в правильном направлении была бы принята с благодарностью. Спасибо!

Некоторые фоне моего приложения:

В моем веб-приложение, я вложенные ресурсы, категории, статьи и комментарии, как так:

resources :categories do 
    resources :articles do 
    resources :microposts, only: [:new, :create, :edit, :destroy 
    end 
end 

(Я знаю, что это не best practice иметь вложенные ресурсы глубже одного уровня, однако я только что вскочил на поезд Rails и: shallow = true не доставлял результаты, которые я искал.)

Категория ies действуют как вложенные множества, предоставленные Awesome Nested Set, и способны «удерживать» как категории, так и статьи (и комментарии по расширению).

Пользователи проходят аутентификацию через сервер LDAP с помощью Devise - в ближайшем будущем я буду настраивать это для того, чтобы автоматически распределить пользователя по правильной группе/роли.

ответ

0

От повторного чтения Rolify documentation Я придумал начало решения моей проблемы.

Всякий раз, когда пользователь создает категорию, подкатегорию или статью, я буду работать

user.add_role :current_role Model.Instance_id 

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

model_instance = Model.find(instance_id) 
model_instance.roles #returns all of the roles associated with that instance 

Я также должен был бы создать несколько методов для обработки (массы) назначения/переназначения ролей, так что, когда флажок (де) выбран, что ожидаемый результат будет достигнут, например, добавление роли/группы к экземпляру и наоборот. Вероятно, что-то похожее на (псевдоним из рубинового ароматизатора)!)

users = User.with_any_role(:some_role) 

def assignRoleToModel(model_instance, users, role) 
    if model_instance.roles.empty? 
    users.each { |u| u.add_role creatorRole model_instance } 
    end 
    flash[:warning] = "#{Model_instance.name} already has that role assigned to it!" 
end 

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

Обновление

Пример того, как управлять ролями через форму https://github.com/RolifyCommunity/rolify/issues/246

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