true, ]; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'name', 'email', 'password', 'timezone', 'is_active', 'lang', ]; /** * The attributes that should be hidden for serialization. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', 'is_active' => 'boolean', 'lang' => Lang::class, ]; /** * Return the user's roles */ public function roles(): belongsToMany { return $this->belongsToMany(Role::class); } public function hasRole(string $role): bool { return $this->roles->where('code', $role)->isNotEmpty(); } public function hasPermission(string $permission): bool { return $this->permissions->search($permission) !== false; } protected function isAdmin(): Attribute { return Attribute::make( get: fn () => $this->hasRole(SystemRole::Admin->value), )->shouldCache(); } protected function permissions(): Attribute { return Attribute::make( get: function () { $roles = $this->roles->modelKeys(); return RolePermission::whereIn('role_id', $roles)->select('permission')->pluck('permission'); }, )->shouldCache(); } }