<?php
namespace App\Security\Voter;
use App\Entity\User;
use App\ValueObject\UserRoles;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Security\Core\User\UserInterface;
use App\ValueObject\UserPermission;
use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
class UserPermissionVoter extends Voter
{
private $security;
public function __construct(
Security $security
) {
$this->security = $security;
}
protected function supports(string $attribute, $subject): bool
{
$userPermissions = UserPermission::getConstants();
if (in_array($attribute, $userPermissions)) {
return true;
}
return false;
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
/** @var User $user */
$user = $token->getUser();
if (!$user instanceof UserInterface) {
return false;
}
// ROLE_MUNIREG
if ($this->security->isGranted(UserRoles::ROLE_MUNIREG)) {
if (in_array($attribute, [
UserPermission::ROLE_EMPLOYEE_UPGRADE_TO_ADMIN_SUPER_ADMIN,
UserPermission::ROLE_EMPLOYEE_SUPER_ADMIN
])) {
return false;
}
return true;
}
// ROLE_SUPER_ADMIN
if ($this->security->isGranted(UserRoles::ROLE_SUPER_ADMIN)) {
return true;
}
// ROLE_ADMIN_MUNIREG
if ($this->security->isGranted(UserRoles::ROLE_ADMIN_MUNIREG)) {
if (
in_array($attribute, [
UserPermission::ROLE_SUPER_ADMIN,
UserPermission::ROLE_EMPLOYEE_SUPER_ADMIN,
UserPermission::ROLE_EXPORT_XLS_AND_PDF_USERS,
UserPermission::ROLE_USER_VIEW,
UserPermission::ROLE_USER_EDIT
])
){
return false;
}
return true;
}
// ROLE_ADMIN_REGISTER >> ROLE_ADMIN_REGISTER_PARTY
if ($this->security->isGranted(UserRoles::ROLE_ADMIN_REGISTER)) {
if (
in_array($attribute, [
UserPermission::ROLE_MUNIREG,
UserPermission::ROLE_ADMIN_MUNICIPAL,
UserPermission::ROLE_SUPER_ADMIN,
UserPermission::ROLE_USER_EDIT,
UserPermission::ROLE_ORGANIZATION_MANAGEMENT,
UserPermission::ROLE_ORGANIZATION_NEW,
UserPermission::ROLE_ORGANIZATION_EDIT,
UserPermission::ROLE_ORGANIZATION_VIEW,
UserPermission::ROLE_MUNICIPALITY,
UserPermission::ROLE_MUNICIPALITY_MANAGEMENT,
UserPermission::ROLE_MUNICIPALITY_EDIT,
UserPermission::ROLE_MUNICIPALITY_NEW,
UserPermission::ROLE_VERSION_NEW,
UserPermission::ROLE_VERSION_EDIT,
UserPermission::ROLE_VERSION_VIEW,
UserPermission::ROLE_TUTORIAL_NEW,
UserPermission::ROLE_TUTORIAL_EDIT,
UserPermission::ROLE_TUTORIAL_MANAGEMENT,
UserPermission::ROLE_VERSION_MANAGEMENT,
UserPermission::ROLE_ADMIN_MUNIREG,
UserPermission::ROLE_EXPORT_XLS_AND_PDF_USERS,
UserPermission::ROLE_PROPERTY_OCCUPANCY_DETAILS,
])
) {
return false;
} elseif ($user->isViewOnly()) {
// dd($attribute);
if (in_array($attribute, [
UserPermission::ROLE_REGISTRATION_ACTIVITY,
UserPermission::ROLE_IMPORT_PROPERTY,
UserPermission::ROLE_FORM_REGISTRATION_EDIT,
UserPermission::ROLE_FORM_RENEWAL_EDIT,
UserPermission::ROLE_DOWNLOAD_RENEWAL,
UserPermission::ROLE_FORM_DEREGISTRATION_EDIT,
UserPermission::ROLE_DOWNLOAD_DEREGISTRATION,
UserPermission::ROLE_MANAGE_INVOICE,
UserPermission::MANAGE_SUPPORT_TICKET_INVOICE,
UserPermission::ROLE_MANAGE_PROPERTY_FILLINGS,
UserPermission::MANAGE_INSPECTION,
UserPermission::ROLE_MANAGE_REPORTS,
UserPermission::ROLE_ORGANIZATION_MANAGEMENT,
UserPermission::ROLE_MANAGE_SUPPORT_FORM,
UserPermission::MANAGE_CONTACT,
UserPermission::ROLE_USER_NEW,
UserPermission::ROLE_MANAGE_PROPERTY_NOTES,
])) {
return false;
}
}
return true;
}
// ROLE_REGISTER >> ROLE_REGISTER_PARTY
if ($this->security->isGranted(UserRoles::ROLE_REGISTER)) {
if (
in_array($attribute, [
UserPermission::ROLE_MUNIREG,
UserPermission::ROLE_ADMIN_MUNICIPAL,
UserPermission::ROLE_SUPER_ADMIN,
UserPermission::ROLE_USER_MANAGEMENT,
UserPermission::ROLE_USER_EDIT_PRIVILEGES,
UserPermission::ROLE_USER_EDIT,
UserPermission::ROLE_ORGANIZATION_MANAGEMENT,
UserPermission::ROLE_ORGANIZATION_NEW,
UserPermission::ROLE_ORGANIZATION_EDIT,
UserPermission::ROLE_ORGANIZATION_VIEW,
UserPermission::ROLE_MUNICIPALITY,
UserPermission::ROLE_MUNICIPALITY_MANAGEMENT,
UserPermission::ROLE_MUNICIPALITY_EDIT,
UserPermission::ROLE_MUNICIPALITY_NEW,
UserPermission::ROLE_VERSION_NEW,
UserPermission::ROLE_VERSION_EDIT,
UserPermission::ROLE_VERSION_VIEW,
UserPermission::ROLE_TUTORIAL_NEW,
UserPermission::ROLE_TUTORIAL_EDIT,
UserPermission::ROLE_TUTORIAL_MANAGEMENT,
UserPermission::ROLE_VERSION_MANAGEMENT,
UserPermission::ROLE_ADMIN_REGISTER_PARTY,
UserPermission::ROLE_ADMIN_MUNIREG,
UserPermission::ROLE_EXPORT_XLS_AND_PDF_USERS,
UserPermission::ROLE_PROPERTY_OCCUPANCY_DETAILS,
])
) {
return false;
} elseif ($user->isViewOnly()) {
// dd($attribute);
if (in_array($attribute, [
UserPermission::ROLE_REGISTRATION_ACTIVITY,
UserPermission::ROLE_IMPORT_PROPERTY,
UserPermission::ROLE_FORM_REGISTRATION_EDIT,
UserPermission::ROLE_FORM_RENEWAL_EDIT,
UserPermission::ROLE_DOWNLOAD_RENEWAL,
UserPermission::ROLE_FORM_DEREGISTRATION_EDIT,
UserPermission::ROLE_DOWNLOAD_DEREGISTRATION,
UserPermission::ROLE_MANAGE_INVOICE,
UserPermission::MANAGE_SUPPORT_TICKET_INVOICE,
UserPermission::ROLE_MANAGE_PROPERTY_FILLINGS,
UserPermission::MANAGE_INSPECTION,
UserPermission::ROLE_MANAGE_REPORTS,
UserPermission::ROLE_ORGANIZATION_MANAGEMENT,
UserPermission::ROLE_MANAGE_SUPPORT_FORM,
UserPermission::MANAGE_CONTACT,
UserPermission::ROLE_USER_NEW,
UserPermission::ROLE_MANAGE_PROPERTY_NOTES,
])) {
return false;
}
}
return true;
}
// ROLE_ADMIN_MUNICIPAL >> ROLE_ADMIN_MUNICIPAL
if ($this->security->isGranted(UserRoles::ROLE_ADMIN_MUNICIPAL)) {
if (
in_array($attribute, [
UserPermission::ROLE_MUNIREG,
UserPermission::ROLE_ADMIN_MUNICIPAL,
UserPermission::ROLE_SUPER_ADMIN,
UserPermission::ROLE_FORM_DEREGISTRATION,
UserPermission::ROLE_ORGANIZATION_MANAGEMENT,
UserPermission::ROLE_ORGANIZATION_NEW,
UserPermission::ROLE_ORGANIZATION_EDIT,
UserPermission::ROLE_ORGANIZATION_VIEW,
UserPermission::ROLE_REGISTER_PARTY,
UserPermission::ROLE_REGISTRATION_ACTIVITY,
UserPermission::ROLE_FORM_REGISTRATION,
UserPermission::ROLE_FORM_RENEWAL,
UserPermission::ROLE_FORM_REGISTRATION_NEW,
UserPermission::ROLE_FORM_REGISTRATION_EDIT,
UserPermission::ROLE_FORM_RENEWAL_NEW,
UserPermission::ROLE_FORM_RENEWAL_EDIT,
UserPermission::ROLE_FORM_DEREGISTRATION_NEW,
UserPermission::ROLE_FORM_DEREGISTRATION_EDIT,
UserPermission::ROLE_VERSION_NEW,
UserPermission::ROLE_VERSION_EDIT,
UserPermission::ROLE_VERSION_VIEW,
UserPermission::ROLE_TUTORIAL_NEW,
UserPermission::ROLE_TUTORIAL_EDIT,
UserPermission::ROLE_TUTORIAL_MANAGEMENT,
UserPermission::ROLE_VERSION_MANAGEMENT,
UserPermission::ROLE_ADMIN_REGISTER_PARTY,
UserPermission::ROLE_ADMIN_MUNIREG,
UserPermission::ROLE_MANAGE_INVOICES_FOR_ALL_USERS,
])
) {
return false;
} elseif ($user->isViewOnly()) {
if (in_array($attribute, [
UserPermission::ROLE_REGISTRATION_ACTIVITY,
UserPermission::ROLE_IMPORT_PROPERTY,
UserPermission::ROLE_DOWNLOAD_RENEWAL,
UserPermission::ROLE_DOWNLOAD_DEREGISTRATION,
UserPermission::ROLE_MANAGE_INVOICE,
UserPermission::MANAGE_SUPPORT_TICKET_INVOICE,
UserPermission::ROLE_MANAGE_PROPERTY_FILLINGS,
UserPermission::MANAGE_INSPECTION,
UserPermission::ROLE_MANAGE_REPORTS,
UserPermission::ROLE_ORGANIZATION_MANAGEMENT,
UserPermission::ROLE_MANAGE_SUPPORT_FORM,
UserPermission::MANAGE_CONTACT,
UserPermission::ROLE_EXPORT_XLS_AND_PDF_USERS,
UserPermission::ROLE_USER_NEW,
UserPermission::ROLE_USER_EDIT,
UserPermission::ROLE_MUNICIPALITY_EDIT,
UserPermission::ROLE_REGISTRATION_ACTIVITY,
UserPermission::ROLE_MANAGE_PROPERTY_NOTES,
UserPermission::ROLE_MANAGE_INVOICES_FOR_ALL_USERS,
])) {
return false;
}
}
return true;
}
// ROLE_MUNICIPAL >> ROLE_MUNICIPALITY
if ($this->security->isGranted(UserRoles::ROLE_MUNICIPAL)) {
if (
in_array($attribute, [
UserPermission::ROLE_MUNIREG,
UserPermission::ROLE_ADMIN_MUNICIPAL,
UserPermission::ROLE_SUPER_ADMIN,
UserPermission::ROLE_FORM_DEREGISTRATION,
UserPermission::ROLE_USER_MANAGEMENT,
UserPermission::ROLE_USER_EDIT_PRIVILEGES,
UserPermission::ROLE_ORGANIZATION_MANAGEMENT,
UserPermission::ROLE_ORGANIZATION_NEW,
UserPermission::ROLE_ORGANIZATION_EDIT,
UserPermission::ROLE_ORGANIZATION_VIEW,
UserPermission::ROLE_REGISTER_PARTY,
UserPermission::ROLE_MUNICIPALITY_MANAGEMENT,
UserPermission::ROLE_MUNICIPALITY_EDIT,
UserPermission::ROLE_MUNICIPALITY_NEW,
UserPermission::ROLE_REGISTRATION_ACTIVITY,
UserPermission::ROLE_FORM_REGISTRATION,
UserPermission::ROLE_FORM_RENEWAL,
UserPermission::ROLE_FORM_REGISTRATION_NEW,
UserPermission::ROLE_FORM_REGISTRATION_EDIT,
UserPermission::ROLE_FORM_RENEWAL_NEW,
UserPermission::ROLE_FORM_RENEWAL_EDIT,
UserPermission::ROLE_FORM_DEREGISTRATION_NEW,
UserPermission::ROLE_FORM_DEREGISTRATION_EDIT,
UserPermission::ROLE_VERSION_NEW,
UserPermission::ROLE_VERSION_EDIT,
UserPermission::ROLE_VERSION_VIEW,
UserPermission::ROLE_TUTORIAL_NEW,
UserPermission::ROLE_TUTORIAL_EDIT,
UserPermission::ROLE_TUTORIAL_MANAGEMENT,
UserPermission::ROLE_VERSION_MANAGEMENT,
UserPermission::ROLE_ADMIN_REGISTER_PARTY,
UserPermission::ROLE_ADMIN_MUNICIPAL,
UserPermission::ROLE_PROPERTY_DETAILS_CREATE,
UserPermission::ROLE_ADMIN_MUNIREG,
UserPermission::ROLE_MANAGE_INVOICES_FOR_ALL_USERS,
])
) {
return false;
} elseif ($user->isViewOnly()) {
if (in_array($attribute, [
UserPermission::ROLE_REGISTRATION_ACTIVITY,
UserPermission::ROLE_IMPORT_PROPERTY,
UserPermission::ROLE_DOWNLOAD_RENEWAL,
UserPermission::ROLE_DOWNLOAD_DEREGISTRATION,
UserPermission::ROLE_MANAGE_INVOICE,
UserPermission::MANAGE_SUPPORT_TICKET_INVOICE,
UserPermission::ROLE_MANAGE_PROPERTY_FILLINGS,
UserPermission::MANAGE_INSPECTION,
UserPermission::ROLE_MANAGE_REPORTS,
UserPermission::ROLE_ORGANIZATION_MANAGEMENT,
UserPermission::ROLE_MANAGE_SUPPORT_FORM,
UserPermission::MANAGE_CONTACT,
UserPermission::ROLE_EXPORT_XLS_AND_PDF_USERS,
UserPermission::ROLE_USER_NEW,
UserPermission::ROLE_USER_EDIT,
UserPermission::ROLE_MUNICIPALITY_EDIT,
UserPermission::ROLE_REGISTRATION_ACTIVITY,
UserPermission::ROLE_MANAGE_PROPERTY_NOTES,
UserPermission::ROLE_MANAGE_INVOICES_FOR_ALL_USERS,
])) {
return false;
}
}
return true;
}
if ($this->security->isGranted(UserRoles::ROLE_MUNICIPAL) || $this->security->isGranted(UserRoles::ROLE_REGISTER) || $this->security->isGranted(UserRoles::ROLE_MUNIREG)) {
}
return false;
}
}