pelican-panel-mirror/app/Policies/ServerPolicy.php
2024-10-19 21:02:49 -04:00

49 lines
1.2 KiB
PHP

<?php
namespace App\Policies;
use App\Models\Server;
use App\Models\User;
class ServerPolicy
{
use DefaultPolicies;
protected string $modelName = 'server';
/**
* Runs before any of the functions are called. Used to determine if the (sub-)user has permissions.
*/
public function before(User $user, string $ability, string|Server $server): ?bool
{
// For "viewAny" the $server param is the class name
if (is_string($server)) {
return null;
}
// Owner has full server permissions
if ($server->owner_id === $user->id) {
return true;
}
$subuser = $server->subusers->where('user_id', $user->id)->first();
// If the user is a subuser check their permissions
if ($subuser) {
return in_array($ability, $subuser->permissions);
}
// Return null to let default policies take over
return null;
}
/**
* This is a horrendous hack to avoid Laravel's "smart" behavior that does
* not call the before() function if there isn't a function matching the
* policy permission.
*/
public function __call(string $name, mixed $arguments): void
{
// do nothing
}
}