Implandação da customização das permissões dos usuarios e das notificaçoes
This commit is contained in:
@@ -7,14 +7,31 @@ class ApplicationController < ActionController::Base
|
||||
before_action :set_tema
|
||||
before_action :preparar_splash
|
||||
|
||||
# Pundit: redireciona se não autorizado
|
||||
rescue_from Pundit::NotAuthorizedError do |e|
|
||||
flash[:alert] = "Você não tem permissão para realizar esta ação."
|
||||
redirect_to root_path
|
||||
# Pundit: redireciona se não autorizado.
|
||||
#
|
||||
# ⚠️ NÃO redirecione para `root_path` aqui: a raiz é o dashboard, e um perfil
|
||||
# sem `dashboard.ver` entraria em loop (nega → raiz → nega). O destino é a
|
||||
# primeira tela que a PESSOA pode abrir; quem não pode abrir nenhuma vai para a
|
||||
# tela de sem-acesso, que explica a quem pedir.
|
||||
rescue_from Pundit::NotAuthorizedError do |_e|
|
||||
flash[:alert] = 'Você não tem permissão para acessar essa área.'
|
||||
redirect_to destino_permitido
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Rota inicial deste usuário (ver User#home_rota). `sem_acesso_path` é o fim de
|
||||
# linha: perfil sem nenhuma permissão.
|
||||
def destino_permitido
|
||||
rota = current_user&.home_rota
|
||||
return sem_acesso_path if rota.nil?
|
||||
|
||||
# Evita loop quando a própria tela negada é a home calculada.
|
||||
destino = public_send(rota)
|
||||
destino == request.path ? sem_acesso_path : destino
|
||||
end
|
||||
helper_method :destino_permitido
|
||||
|
||||
def set_tema
|
||||
@tema = current_user&.tema_preferido || 'dark'
|
||||
end
|
||||
@@ -28,8 +45,11 @@ class ApplicationController < ActionController::Base
|
||||
@mostrar_splash = session.delete(:mostrar_splash)
|
||||
end
|
||||
|
||||
# Mesma regra do Users::SessionsController: o destino é a primeira tela que o
|
||||
# PERFIL da pessoa permite, não uma rota fixa por papel.
|
||||
def after_sign_in_path_for(resource)
|
||||
session[:mostrar_splash] = true
|
||||
resource.motorista? ? motorista_dashboard_path : dashboard_path
|
||||
rota = resource.home_rota
|
||||
rota ? public_send(rota) : sem_acesso_path
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user