Leonid Nikitin
1facb19efb
The Role class in app/Models has been refactored to improve readability and maintainability. The 'slug' field was replaced with 'code' for consistency with the rest of the codebase. In addition, the 'isRemove' and 'isAdmin' methods were rewritten using new 'Attribute' Eloquent cast. This refactor enhances the code's clarity, promotes better comprehension, and clears redundant code comments.
56 lines
1.3 KiB
PHP
56 lines
1.3 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Enums\SystemRole as SystemRoleEnum;
|
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Relations\hasMany;
|
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
|
|
|
final class Role extends Model
|
|
{
|
|
use HasFactory, SoftDeletes;
|
|
|
|
/**
|
|
* The attributes that are mass assignable.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $fillable = [
|
|
'name',
|
|
'code'
|
|
];
|
|
|
|
public function scopeLatest(Builder $query): Builder
|
|
{
|
|
return $query->orderBy('id', 'desc');
|
|
}
|
|
|
|
public function scopeAlphavit(Builder $query): Builder
|
|
{
|
|
return $query->orderBy('name', 'asc');
|
|
}
|
|
|
|
public function permissions(): hasMany
|
|
{
|
|
return $this->hasMany(RolePermission::class, 'role_id', 'id');
|
|
}
|
|
|
|
protected function isRemove(): Attribute
|
|
{
|
|
return Attribute::make(
|
|
get: fn ($dontRemove) => ( SystemRoleEnum::tryFrom($this->code) === null ),
|
|
)->shouldCache();
|
|
}
|
|
|
|
protected function isAdmin(): Attribute
|
|
{
|
|
return Attribute::make(
|
|
get: fn () => ( $this->code === SystemRoleEnum::Admin->value ),
|
|
)->shouldCache();
|
|
}
|
|
}
|