namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Role extends Model { use HasFactory; protected $fillable = [ 'name', 'slug', 'description', 'is_system', ]; protected $casts = [ 'is_system' => 'boolean', ]; // Relationships public function permissions() { return $this->belongsToMany(Permission::class, 'role_permissions'); } public function admins() { return $this->hasMany(Admin::class); } // Methods public function givePermissionTo($permission) { if (is_string($permission)) { $permission = Permission::where('slug', $permission)->firstOrFail(); } $this->permissions()->syncWithoutDetaching($permission); } public function revokePermissionTo($permission) { if (is_string($permission)) { $permission = Permission::where('slug', $permission)->firstOrFail(); } $this->permissions()->detach($permission); } public function syncPermissions($permissions) { $this->permissions()->sync($permissions); } public function hasPermission($permission) { if (is_string($permission)) { return $this->permissions()->where('slug', $permission)->exists(); } return $this->permissions()->where('id', $permission->id)->exists(); } }