first commit
This commit is contained in:
156
vendor/spatie/laravel-permission/src/Models/Permission.php
vendored
Normal file
156
vendor/spatie/laravel-permission/src/Models/Permission.php
vendored
Normal file
@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
namespace Spatie\Permission\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Collection;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
|
||||
use Spatie\Permission\Contracts\Permission as PermissionContract;
|
||||
use Spatie\Permission\Exceptions\PermissionAlreadyExists;
|
||||
use Spatie\Permission\Exceptions\PermissionDoesNotExist;
|
||||
use Spatie\Permission\Guard;
|
||||
use Spatie\Permission\PermissionRegistrar;
|
||||
use Spatie\Permission\Traits\HasRoles;
|
||||
use Spatie\Permission\Traits\RefreshesPermissionCache;
|
||||
|
||||
/**
|
||||
* @property ?\Illuminate\Support\Carbon $created_at
|
||||
* @property ?\Illuminate\Support\Carbon $updated_at
|
||||
*/
|
||||
class Permission extends Model implements PermissionContract
|
||||
{
|
||||
use HasRoles;
|
||||
use RefreshesPermissionCache;
|
||||
|
||||
protected $guarded = [];
|
||||
|
||||
public function __construct(array $attributes = [])
|
||||
{
|
||||
$attributes['guard_name'] = $attributes['guard_name'] ?? config('auth.defaults.guard');
|
||||
|
||||
parent::__construct($attributes);
|
||||
|
||||
$this->guarded[] = $this->primaryKey;
|
||||
$this->table = config('permission.table_names.permissions') ?: parent::getTable();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return PermissionContract|Permission
|
||||
*
|
||||
* @throws PermissionAlreadyExists
|
||||
*/
|
||||
public static function create(array $attributes = [])
|
||||
{
|
||||
$attributes['guard_name'] = $attributes['guard_name'] ?? Guard::getDefaultName(static::class);
|
||||
|
||||
$permission = static::getPermission(['name' => $attributes['name'], 'guard_name' => $attributes['guard_name']]);
|
||||
|
||||
if ($permission) {
|
||||
throw PermissionAlreadyExists::create($attributes['name'], $attributes['guard_name']);
|
||||
}
|
||||
|
||||
return static::query()->create($attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* A permission can be applied to roles.
|
||||
*/
|
||||
public function roles(): BelongsToMany
|
||||
{
|
||||
return $this->belongsToMany(
|
||||
config('permission.models.role'),
|
||||
config('permission.table_names.role_has_permissions'),
|
||||
app(PermissionRegistrar::class)->pivotPermission,
|
||||
app(PermissionRegistrar::class)->pivotRole
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* A permission belongs to some users of the model associated with its guard.
|
||||
*/
|
||||
public function users(): BelongsToMany
|
||||
{
|
||||
return $this->morphedByMany(
|
||||
getModelForGuard($this->attributes['guard_name'] ?? config('auth.defaults.guard')),
|
||||
'model',
|
||||
config('permission.table_names.model_has_permissions'),
|
||||
app(PermissionRegistrar::class)->pivotPermission,
|
||||
config('permission.column_names.model_morph_key')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a permission by its name (and optionally guardName).
|
||||
*
|
||||
* @return PermissionContract|Permission
|
||||
*
|
||||
* @throws PermissionDoesNotExist
|
||||
*/
|
||||
public static function findByName(string $name, ?string $guardName = null): PermissionContract
|
||||
{
|
||||
$guardName = $guardName ?? Guard::getDefaultName(static::class);
|
||||
$permission = static::getPermission(['name' => $name, 'guard_name' => $guardName]);
|
||||
if (! $permission) {
|
||||
throw PermissionDoesNotExist::create($name, $guardName);
|
||||
}
|
||||
|
||||
return $permission;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find a permission by its id (and optionally guardName).
|
||||
*
|
||||
* @return PermissionContract|Permission
|
||||
*
|
||||
* @throws PermissionDoesNotExist
|
||||
*/
|
||||
public static function findById(int|string $id, ?string $guardName = null): PermissionContract
|
||||
{
|
||||
$guardName = $guardName ?? Guard::getDefaultName(static::class);
|
||||
$permission = static::getPermission([(new static())->getKeyName() => $id, 'guard_name' => $guardName]);
|
||||
|
||||
if (! $permission) {
|
||||
throw PermissionDoesNotExist::withId($id, $guardName);
|
||||
}
|
||||
|
||||
return $permission;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find or create permission by its name (and optionally guardName).
|
||||
*
|
||||
* @return PermissionContract|Permission
|
||||
*/
|
||||
public static function findOrCreate(string $name, ?string $guardName = null): PermissionContract
|
||||
{
|
||||
$guardName = $guardName ?? Guard::getDefaultName(static::class);
|
||||
$permission = static::getPermission(['name' => $name, 'guard_name' => $guardName]);
|
||||
|
||||
if (! $permission) {
|
||||
return static::query()->create(['name' => $name, 'guard_name' => $guardName]);
|
||||
}
|
||||
|
||||
return $permission;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current cached permissions.
|
||||
*/
|
||||
protected static function getPermissions(array $params = [], bool $onlyOne = false): Collection
|
||||
{
|
||||
return app(PermissionRegistrar::class)
|
||||
->setPermissionClass(static::class)
|
||||
->getPermissions($params, $onlyOne);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current cached first permission.
|
||||
*
|
||||
* @return PermissionContract|Permission|null
|
||||
*/
|
||||
protected static function getPermission(array $params = []): ?PermissionContract
|
||||
{
|
||||
/** @var PermissionContract|null */
|
||||
return static::getPermissions($params, true)->first();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user