Files

52 lines
1.3 KiB
PHP

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Spatie\Permission\Models\Role;
class AdminRole extends Model
{
protected $fillable = ['name', 'label', 'permissions'];
protected $casts = [
'permissions' => 'array',
'is_system' => 'boolean',
];
public function getPermissionsListAttribute(): array
{
return $this->permissions ?? [];
}
public function scopeNotSystem($query)
{
return $query->where('is_system', false);
}
/**
* The role a user linked to a new admin profile gets: the platform setting
* admin_settings.default_admin_role, 'administrator' when it is not set.
*/
public static function defaultName(): string
{
return (string) (timebank_config('admin_settings.default_admin_role') ?: 'administrator');
}
/**
* Give a user this role on one admin profile: the scoped Spatie role Admin\{adminId}\{name}, created
* when missing and synced with this definition's permissions.
*/
public function assignScopedTo(User $user, int $adminId): Role
{
$role = Role::findOrCreate("Admin\\{$adminId}\\{$this->name}", 'web');
$role->syncPermissions($this->permissions ?? []);
if (!$user->hasRole($role)) {
$user->assignRole($role);
}
return $role;
}
}