2015-05-21 4 views
0

Я использую систему аутентификации Omniauth + Devise, где пользователь может зарегистрироваться с помощью своего пароля электронной почты + или своей учетной записи Google+.Жемчуг CanCanCan с Devise + Omniauth Ruby on Rails

Теперь мне нужно использовать жемчужину CanCanCan, чтобы проверить, имеет ли пользователь, который имеет вход, разрешения для доступа в зону после входа в систему, но я не знаю, где я могу выполнить это условие, в котором файл Devise хранит перенаправление после sucessfull функция входа?

+0

Лучшим подходом является добавление авторизации к контроллеру, который обрабатывает вашу «зону после входа». – max

ответ

0

Вам необходимо переопределить контроллер регистрации Devise.

class RegistrationsController < Devise::RegistrationsController 
    protected 

    def after_sign_up_path_for(resource) 
    '/home' # your path to redirect after signup 
    end 
end 

Вы можете определить права доступа в файле powers.rb.

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= user.new 

    # Here you can define the permissions for home page for user 
    end 
end 
0

Вы можете реализовать метод after_sign_in_path в контроллере приложений, где ресурс является ваш пользователь:

class ApplicationController < ActionController::Base 
    def after_sign_in_path_for(resource) 
    if resource.can? :show, ProtectedResource 
     protected_area_path 
    else 
     denied_access_path 
    end 
    end 
end 

Это покажет Придумайте где перенаправить пользователя.

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