'name' // 'name' => 'title', // 'permission' => 'name' ]; public static $snakeAttributes = false; protected $appends = ['title']; protected $casts = [ 'visible' => 'bool', 'keepAlive' => 'bool', 'alwaysShow' => 'bool', // 'parent_id' => 'camel' ]; /** * @throws ApiException */ public static function create(array $attributes = []) { $attributes['guard_name'] = $attributes['guard_name'] ?? Guard::getDefaultName(static::class); if (isset($attributes['permission']) && $attributes['permission']) { $permission = static::getPermission(['permission' => $attributes['permission'], 'guard_name' => $attributes['guard_name']]); if ($permission) { throw new ApiException(['code' => Response::HTTP_UNPROCESSABLE_ENTITY, 'message' => 'PERMISSION_ALREADY_EXISTS']); } } return static::query()->create($attributes); } /** * @param array $attributes * @param array $options * @throws ApiException */ public function update(array $attributes = [], array $options = []): void { $attributes['guard_name'] = $attributes['guard_name'] ?? Guard::getDefaultName(static::class); if (isset($attributes['permission']) && $attributes['permission']) { $permission = static::getPermission(['permission' => $attributes['permission'], 'guard_name' => $attributes['guard_name']]); if ($permission && $permission->id !== $attributes['id']) { throw new ApiException(['code' => Response::HTTP_UNPROCESSABLE_ENTITY, 'message' => 'PERMISSION_ALREADY_EXISTS']); } } static::query()->where('id', $attributes['id'])->update($attributes, $options); Cache::forget(config('permission.cache.key')); } public function setTitleAttribute($value) { $this->attributes['name'] = $value; } public function getTitleAttribute() { return $this->attributes['name']; } public function setNameAttribute($value) { $this->attributes['permission'] = $value; } public function getNameAttribute() { return $this->attributes['permission']; } public function setComponentNameAttribute($value) { $this->attributes['component_name'] = $value; } public function setVisibleAttribute($value) { $this->attributes['visible'] = $value ? 1 : 0; } public function setAlwaysShowAttribute($value) { $this->attributes['always_show'] = $value ? 1 : 0; } public function setKeepAliveAttribute($value) { $this->attributes['keep_alive'] = $value ? 1 : 0; } }