Permission.php 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Database\Eloquent\Factories\HasFactory;
  4. use Illuminate\Database\Eloquent\Model;
  5. use Illuminate\Database\Eloquent\Relations\BelongsTo;
  6. use Illuminate\Database\Eloquent\Relations\HasMany;
  7. use Illuminate\Database\Eloquent\SoftDeletes;
  8. use Kalnoy\Nestedset\NodeTrait;
  9. /**
  10. * @property int $id
  11. * @property string $scope
  12. * @property string $description
  13. * @property int $bits
  14. * @property int|null $parent_id
  15. * @property int $_lft
  16. * @property int $_rgt
  17. * @property \Illuminate\Support\Carbon|null $created_at
  18. * @property \Illuminate\Support\Carbon|null $updated_at
  19. * @property \Illuminate\Support\Carbon|null $deleted_at
  20. * @property-read \Kalnoy\Nestedset\Collection<int, Permission> $children
  21. * @property-read int|null $children_count
  22. * @property-read Permission|null $parent
  23. * @property-read \Illuminate\Database\Eloquent\Collection<int, \App\Models\UserTypePermission> $userTypePermissions
  24. * @property-read int|null $user_type_permissions_count
  25. * @method static \Kalnoy\Nestedset\Collection<int, static> all($columns = ['*'])
  26. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission ancestorsAndSelf($id, array $columns = [])
  27. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission ancestorsOf($id, array $columns = [])
  28. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission applyNestedSetScope(?string $table = null)
  29. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission countErrors()
  30. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission d()
  31. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission defaultOrder(string $dir = 'asc')
  32. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission descendantsAndSelf($id, array $columns = [])
  33. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission descendantsOf($id, array $columns = [], $andSelf = false)
  34. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission fixSubtree($root)
  35. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission fixTree($root = null)
  36. * @method static \Kalnoy\Nestedset\Collection<int, static> get($columns = ['*'])
  37. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission getNodeData($id, $required = false)
  38. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission getPlainNodeData($id, $required = false)
  39. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission getTotalErrors()
  40. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission hasChildren()
  41. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission hasParent()
  42. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission isBroken()
  43. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission leaves(array $columns = [])
  44. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission makeGap(int $cut, int $height)
  45. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission moveNode($key, $position)
  46. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission newModelQuery()
  47. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission newQuery()
  48. * @method static \Illuminate\Database\Eloquent\Builder<static>|Permission onlyTrashed()
  49. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission orWhereAncestorOf(bool $id, bool $andSelf = false)
  50. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission orWhereDescendantOf($id)
  51. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission orWhereNodeBetween($values)
  52. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission orWhereNotDescendantOf($id)
  53. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission query()
  54. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission rebuildSubtree($root, array $data, $delete = false)
  55. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission rebuildTree(array $data, $delete = false, $root = null)
  56. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission reversed()
  57. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission root(array $columns = [])
  58. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereAncestorOf($id, $andSelf = false, $boolean = 'and')
  59. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereAncestorOrSelf($id)
  60. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereBits($value)
  61. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereCreatedAt($value)
  62. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereDeletedAt($value)
  63. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereDescendantOf($id, $boolean = 'and', $not = false, $andSelf = false)
  64. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereDescendantOrSelf(string $id, string $boolean = 'and', string $not = false)
  65. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereDescription($value)
  66. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereId($value)
  67. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereIsAfter($id, $boolean = 'and')
  68. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereIsBefore($id, $boolean = 'and')
  69. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereIsLeaf()
  70. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereIsRoot()
  71. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereLft($value)
  72. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereNodeBetween($values, $boolean = 'and', $not = false, $query = null)
  73. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereNotDescendantOf($id)
  74. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereParentId($value)
  75. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereRgt($value)
  76. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereScope($value)
  77. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission whereUpdatedAt($value)
  78. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission withDepth(string $as = 'depth')
  79. * @method static \Illuminate\Database\Eloquent\Builder<static>|Permission withTrashed(bool $withTrashed = true)
  80. * @method static \Kalnoy\Nestedset\QueryBuilder<static>|Permission withoutRoot()
  81. * @method static \Illuminate\Database\Eloquent\Builder<static>|Permission withoutTrashed()
  82. * @mixin \Eloquent
  83. */
  84. class Permission extends Model
  85. {
  86. use HasFactory, SoftDeletes, NodeTrait;
  87. protected $guarded = ["id"];
  88. public const VIEW = 1;
  89. public const ADD = 2;
  90. public const EDIT = 4;
  91. public const DELETE = 8;
  92. public const PRINT = 16;
  93. public const EXPORT = 32;
  94. public const IMPORT = 64;
  95. public const LIMIT = 128;
  96. public const MENU = 256;
  97. public const CRUD = self::MENU | self::VIEW | self::ADD | self::EDIT | self::DELETE;
  98. public const ALL_PERMS = 511;
  99. /**
  100. * The attributes that should be cast.
  101. *
  102. * @return array<string, string>
  103. */
  104. protected function casts(): array
  105. {
  106. return [
  107. "parent_id" => "integer",
  108. "bits" => "integer",
  109. ];
  110. }
  111. public static function getBit(string $type): int
  112. {
  113. $type = strtoupper($type);
  114. return match ($type) {
  115. 'VIEW' => self::VIEW,
  116. 'ADD' => self::ADD,
  117. 'EDIT' => self::EDIT,
  118. 'DELETE' => self::DELETE,
  119. 'PRINT' => self::PRINT,
  120. 'EXPORT' => self::EXPORT,
  121. 'IMPORT' => self::IMPORT,
  122. 'LIMIT' => self::LIMIT,
  123. 'MENU' => self::MENU,
  124. default => 0,
  125. };
  126. }
  127. /**
  128. * @return HasMany
  129. */
  130. public function children(): HasMany
  131. {
  132. return $this->hasMany(Permission::class, "parent_id");
  133. }
  134. /**
  135. * @return BelongsTo
  136. */
  137. public function parent(): BelongsTo
  138. {
  139. return $this->belongsTo(Permission::class, "parent_id");
  140. }
  141. /**
  142. * @return HasMany
  143. */
  144. public function userTypePermissions(): HasMany
  145. {
  146. return $this->hasMany(UserTypePermission::class);
  147. }
  148. }