2014-11-24 4 views
4

В моем веб-сайте приложения rails посетители могут регистрироваться и создавать контент. Он использует устройство с пользовательской моделью, и все работает хорошо.Rails_admin: Должен ли я иметь admin_user или пользователя с ролью администратора для управления пользователями и административной панелью

Теперь я хочу использовать rails_admin для управления ресурсами веб-сайта и пользователями и т. Д., И только люди с административными превалированиями должны иметь доступ к нему.

Должен ли я создать отдельную модель AdminUser для доступа к панели администратора или использовать модель пользователя с ролью администратора и использовать некоторую библиотеку авторизации для управления доступом.

Если у меня только одна модель, я хочу, чтобы пользователи были перенаправлены на панель администратора после входа в систему, если пользователь является администратором, а если нет, то я хочу, чтобы пользователь перенаправлялся в свой профиль. И какая авторизационная библиотека cancan или pundit будет более подходящей в моем случае.

Спасибо!

ответ

4

Хороший вопрос. Я использую Rails Admin и Pundit в своем проекте.

Я предпочитаю иметь модель администратора отдельно от модели пользователя.

Одна из причин заключается в том, что мне нравится иметь возможность «Стать пользователем» из Rails Admin, чтобы иметь возможность помочь им, когда у них есть проблема. Его проще сделать, когда у вас есть отдельные модели пользователей и администраторов.

Модель администратора может быть супер простой. Сформировать его rails generate devise Admin

Затем в config/initializers/rails_admin.rb добавить

config.authenticate_with do 
    warden.authenticate! :scope => :admin 
end 

config.current_user_method(&:current_admin) 

Для перенаправления к соответствующему профилю, добавьте этот метод к вашему ApplicationController

def after_sign_in_path_for(resource) 
    if resource.class == Administrator 
    rails_admin_path 
    else 
    # Change profile_path to where you want regular users to go 
    stored_location_for(resource) || profile_path 
    end 
end 

Для того, чтобы не допустить подписания из тока Admin при выходе из текущего пользователя, установите эту конфигурацию в config/initializers/devise.rb

config.sign_out_all_scopes = false 

Чтобы ответить на другой вопрос, я использовал как CanCan, так и Pundit. Мне нравится Pundit лучше, потому что с CanCan все разрешения оцениваются для каждого запроса. С Pundit разрешения проверяются только при необходимости. Pundit также более гибкий в моем опыте.

+0

Привет @Monkbroc просто интересуется, как вы реализовали Pundit с несколькими пользовательскими классами (например, Admin и User) – jufemaiz

+0

Уверенный @jufemaiz. Можете ли вы задать вопрос о пандите с несколькими моделями, и я отвечу на него? – monkbroc

+0

Будет делать @monkbroc – jufemaiz

0

Дополняя monkbroc ответ:

Для меня, в RoR 4 переменные: админ и: current_admin никогда не работал. Видел несколько страниц о проблеме, является Warden не регистрируя роль, когда в Завещании не модель, а перечисление ... и нашла другое решение, как это:

config.authorize_with do |controller| 
    unless current_user.try(:admin?) 
    flash[:error] = "You are not an admin" 
    redirect_to 'visitors#index' 
end 
end 

код приходит от этого другого ответа: Authenticate using Devise and Rails Admin for particular routes