$children * @property-read int|null $children_count * @property-read Permission|null $parent * @property-read \Illuminate\Database\Eloquent\Collection $userTypePermissions * @property-read int|null $user_type_permissions_count * @method static \Kalnoy\Nestedset\Collection all($columns = ['*']) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission ancestorsAndSelf($id, array $columns = []) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission ancestorsOf($id, array $columns = []) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission applyNestedSetScope(?string $table = null) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission countErrors() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission d() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission defaultOrder(string $dir = 'asc') * @method static \Kalnoy\Nestedset\QueryBuilder|Permission descendantsAndSelf($id, array $columns = []) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission descendantsOf($id, array $columns = [], $andSelf = false) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission fixSubtree($root) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission fixTree($root = null) * @method static \Kalnoy\Nestedset\Collection get($columns = ['*']) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission getNodeData($id, $required = false) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission getPlainNodeData($id, $required = false) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission getTotalErrors() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission hasChildren() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission hasParent() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission isBroken() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission leaves(array $columns = []) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission makeGap(int $cut, int $height) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission moveNode($key, $position) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission newModelQuery() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Permission onlyTrashed() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission orWhereAncestorOf(bool $id, bool $andSelf = false) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission orWhereDescendantOf($id) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission orWhereNodeBetween($values) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission orWhereNotDescendantOf($id) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission query() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission rebuildSubtree($root, array $data, $delete = false) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission rebuildTree(array $data, $delete = false, $root = null) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission reversed() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission root(array $columns = []) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereAncestorOf($id, $andSelf = false, $boolean = 'and') * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereAncestorOrSelf($id) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereBits($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereCreatedAt($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereDeletedAt($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereDescendantOf($id, $boolean = 'and', $not = false, $andSelf = false) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereDescendantOrSelf(string $id, string $boolean = 'and', string $not = false) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereDescription($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereId($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereIsAfter($id, $boolean = 'and') * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereIsBefore($id, $boolean = 'and') * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereIsLeaf() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereIsRoot() * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereLft($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereNodeBetween($values, $boolean = 'and', $not = false, $query = null) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereNotDescendantOf($id) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereParentId($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereRgt($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereScope($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission whereUpdatedAt($value) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission withDepth(string $as = 'depth') * @method static \Illuminate\Database\Eloquent\Builder|Permission withTrashed(bool $withTrashed = true) * @method static \Kalnoy\Nestedset\QueryBuilder|Permission withoutRoot() * @method static \Illuminate\Database\Eloquent\Builder|Permission withoutTrashed() * @mixin \Eloquent */ class Permission extends Model { use HasFactory, SoftDeletes, NodeTrait; protected $guarded = ["id"]; public const VIEW = 1; public const ADD = 2; public const EDIT = 4; public const DELETE = 8; public const PRINT = 16; public const EXPORT = 32; public const IMPORT = 64; public const LIMIT = 128; public const MENU = 256; public const CRUD = self::MENU | self::VIEW | self::ADD | self::EDIT | self::DELETE; public const ALL_PERMS = 511; /** * The attributes that should be cast. * * @return array */ protected function casts(): array { return [ "parent_id" => "integer", "bits" => "integer", ]; } public static function getBit(string $type): int { $type = strtoupper($type); return match ($type) { 'VIEW' => self::VIEW, 'ADD' => self::ADD, 'EDIT' => self::EDIT, 'DELETE' => self::DELETE, 'PRINT' => self::PRINT, 'EXPORT' => self::EXPORT, 'IMPORT' => self::IMPORT, 'LIMIT' => self::LIMIT, 'MENU' => self::MENU, default => 0, }; } /** * @return HasMany */ public function children(): HasMany { return $this->hasMany(Permission::class, "parent_id"); } /** * @return BelongsTo */ public function parent(): BelongsTo { return $this->belongsTo(Permission::class, "parent_id"); } /** * @return HasMany */ public function userTypePermissions(): HasMany { return $this->hasMany(UserTypePermission::class); } }