2025-05-20 10:16:12 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Policies\Rules;
|
|
|
|
|
|
|
|
|
|
use App\Enums\UserRolesEnum;
|
2025-05-26 11:33:47 +02:00
|
|
|
use App\Models\User;
|
2025-05-20 10:16:12 +02:00
|
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Userlevel Policiy Static Rules
|
|
|
|
|
*
|
|
|
|
|
* @codeCoverageIgnore
|
|
|
|
|
*/
|
|
|
|
|
abstract class UserStaticRules
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Allow everyone.
|
|
|
|
|
*
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public static function everyOne(): bool
|
|
|
|
|
{
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Allow no one.
|
|
|
|
|
*
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public static function noOne(): bool
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* At least a minimum role
|
|
|
|
|
*
|
|
|
|
|
* @param \Illuminate\Database\Eloquent\Model $authModel
|
|
|
|
|
* @param \App\Enums\UserRolesEnum $minRole
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public static function atLeastRole(Model $authModel, UserRolesEnum $minRole): bool
|
|
|
|
|
{
|
|
|
|
|
return isset($authModel->role) && $authModel->role->value() <= $minRole->value();
|
|
|
|
|
}
|
2025-05-26 11:33:47 +02:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Allow client users associated to the tenant OR admin users.
|
|
|
|
|
*
|
|
|
|
|
* @param \App\Models\User $authUser
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public static function restrictTenant(User $authUser): bool
|
|
|
|
|
{
|
|
|
|
|
return UserStaticRules::atLeastRole($authUser, UserRolesEnum::client) &&
|
|
|
|
|
\in_array(\tenant()->getKey(), $authUser->tenants->pluck('id')->toArray()) ||
|
|
|
|
|
UserStaticRules::atLeastRole($authUser, UserRolesEnum::admin);
|
|
|
|
|
}
|
2025-05-20 10:16:12 +02:00
|
|
|
}
|