Implandação da customização das permissões dos usuarios e das notificaçoes
This commit is contained in:
@@ -1,44 +1,35 @@
|
||||
# app/policies/user_policy.rb
|
||||
class UserPolicy < ApplicationPolicy
|
||||
def index?
|
||||
admin_ou_gerente?
|
||||
end
|
||||
def index? = pode?('admin.usuarios')
|
||||
|
||||
def show?
|
||||
admin? || record == user
|
||||
end
|
||||
# Cada um enxerga a própria ficha (é assim que a tela de perfil pessoal
|
||||
# funciona), além de quem administra usuários.
|
||||
def show? = pode?('admin.usuarios') || record == user
|
||||
|
||||
def create?
|
||||
admin?
|
||||
end
|
||||
def create? = pode?('admin.usuarios_gerenciar')
|
||||
def new? = create?
|
||||
|
||||
def new?
|
||||
create?
|
||||
end
|
||||
# ⚠️ `record == user` CONTINUA aqui de propósito: é o que permite alguém editar
|
||||
# o próprio cadastro (nome, senha). O que NÃO pode é essa mesma pessoa mudar o
|
||||
# próprio papel/perfil e se promover — isso é barrado em #alterar_acesso?, que
|
||||
# o controller usa para decidir quais campos aceita.
|
||||
def update? = pode?('admin.usuarios_gerenciar') || record == user
|
||||
def edit? = update?
|
||||
|
||||
def update?
|
||||
admin? || record == user
|
||||
end
|
||||
def destroy? = create? && record != user
|
||||
def toggle_ativo? = create? && record != user
|
||||
|
||||
def edit?
|
||||
update?
|
||||
end
|
||||
|
||||
def destroy?
|
||||
admin? && record != user
|
||||
end
|
||||
|
||||
def toggle_ativo?
|
||||
admin?
|
||||
end
|
||||
|
||||
# admin? e admin_ou_gerente? vêm da ApplicationPolicy.
|
||||
# Pode mexer no TIPO DE CONTA e no PERFIL DE ACESSO de alguém? Nunca no
|
||||
# próprio: senão qualquer usuário se promove editando a própria ficha.
|
||||
def alterar_acesso? = pode?('admin.usuarios_gerenciar') && record != user
|
||||
|
||||
class Scope < Scope
|
||||
def resolve
|
||||
# Continua por papel: filtrar por permissão exigiria carregar o perfil de
|
||||
# cada linha (N+1) para responder algo que a policy já cobre na ação.
|
||||
if user.admin?
|
||||
scope.all
|
||||
elsif user.gerente?
|
||||
elsif user.pode?('admin.usuarios')
|
||||
scope.where.not(role: :admin)
|
||||
else
|
||||
scope.where(id: user.id)
|
||||
|
||||
Reference in New Issue
Block a user