Разработайте аутентификацию с помощью STI Sub Classes и Rails Admin

StackOverflow https://stackoverflow.com/questions/9458983

Вопрос

Так что я использую STI, чтобы включить некоторые роли в моих пользователей.Прямо сейчас у меня просто обычные пользователи и администраторы.Я установил Rails_Admin, и мне нужен способ аутентификации администраторов, но я не уверен, как это сделать безопасно.

прямо сейчас у меня есть этот код в моем контроллере приложений

def authenticate_admin!(opts={})
  current_admin || redirect_to(?)
end

def current_admin
  current_user if current_user.is_a? Admin
end
.

в моем файле Rails_admin.rb У меня есть это

config.authenticate_with do
 authenticate_admin!
end
.

Моя текущая проблема в том, что я не могу получить Redirect_to, чтобы на самом деле направить ни к чему-либо.Я продолжаю получать ошибки.Также простые перенаправления, если пользователь не является администратором, все, что мне нужно?Это лучшая практика и самая безопасная?Я собираюсь в правильном направлении здесь?Любая помощь будет оценена.Спасибо

Это было полезно?

Решение

ОК, пара вещей:

1) Канкан довольно прост в использовании и стоит небольшую установку.Вот пример того, как может выглядеть приложение / модели / возможности. Rb, если у вас есть два метода пользовательских экземпляров IS_ADMIN?и iS_reviewer?

class Ability
  include CanCan::Ability
  def initialize(user)
    if user && user.is_reviewer?
      can :access, :rails_admin
      can :dashboard
      cannot :read, [Class1, Class2, Class3]
      can :read, Class4
    end
    if user && user.is_admin?
      can :access, :rails_admin
      can :manage, :all
    end
  end
end
.

Ваш конфигуратор Railsadmin будет содержать следующее:

RailsAdmin.config do |config|
  config.authorize_with :cancan
  ...
end
.

И не забывайте, вам придется добавить канкан на ваш драгоценный элемент, который будет установлен как зависимость.

2) Далее, и, вероятно, более ценный, состоит в том, что вы не хотите бросать код перенаправления в методе аутентификации.Вместо этого вы можете добавить следующее в ApplicationController:

rescue_from Acl9::AccessDenied do |exception|
  respond_to do |format|
    format.json do
      render :json => { :success => false, :message => "You do not have access to do this action." }
    end
    format.html do
      flash[:error] = 'You do not have access to view this page.'
      redirect_to root_url
    end
  end
end
.

или только что:

rescue_from Acl9::AccessDenied do |exception|
  flash[:error] = 'You do not have access to view this page.'
  redirect_to root_url
end
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top