| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- <?php
- namespace App\Models;
- use Illuminate\Database\Eloquent\Builder;
- use Illuminate\Database\Eloquent\Model;
- use Illuminate\Database\Eloquent\Relations\BelongsToMany;
- use Illuminate\Support\Collection;
- class Permission extends Model
- {
- public const TYPE_ACTION = 'action';
- public const TYPE_FIELD = 'field';
- protected $fillable = [
- 'slug',
- 'name',
- 'description',
- 'module',
- 'entity',
- 'field',
- 'action',
- 'type',
- 'group',
- 'sort',
- 'is_system',
- ];
- protected function casts(): array
- {
- return [
- 'is_system' => 'boolean',
- ];
- }
- public function roles(): BelongsToMany
- {
- return $this->belongsToMany(Role::class, 'role_permissions')
- ->withPivot('effect')
- ->withTimestamps();
- }
- public function users(): BelongsToMany
- {
- return $this->belongsToMany(User::class, 'user_permissions')
- ->withPivot(['effect', 'reason', 'expires_at'])
- ->withTimestamps();
- }
- public function scopeActionPermissions(Builder $query): Builder
- {
- return $query->where('type', self::TYPE_ACTION);
- }
- public function scopeFieldPermissions(Builder $query): Builder
- {
- return $query->where('type', self::TYPE_FIELD);
- }
- public static function getGroupedForUi(): Collection
- {
- return self::query()
- ->orderBy('sort')
- ->orderBy('module')
- ->orderBy('type')
- ->orderBy('slug')
- ->get()
- ->groupBy('group');
- }
- }
|