roles()->detach(); // Delete the permission $result = parent::delete(); return $result; } /** * Get a list of roles to which this permission is assigned. * * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany */ public function roles() { /** @var UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */ $classMapper = static::$ci->classMapper; return $this->belongsToMany($classMapper->getClassMapping('role'), 'permission_roles', 'permission_id', 'role_id')->withTimestamps(); } /** * Query scope to get all permissions assigned to a specific role. * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $roleId * @return \Illuminate\Database\Eloquent\Builder */ public function scopeForRole($query, $roleId) { return $query->join('permission_roles', function ($join) use ($roleId) { $join->on('permission_roles.permission_id', 'permissions.id') ->where('role_id', $roleId); }); } /** * Query scope to get all permissions NOT associated with a specific role. * * @param \Illuminate\Database\Eloquent\Builder $query * @param int $roleId * @return \Illuminate\Database\Eloquent\Builder */ public function scopeNotForRole($query, $roleId) { return $query->join('permission_roles', function ($join) use ($roleId) { $join->on('permission_roles.permission_id', 'permissions.id') ->where('role_id', '!=', $roleId); }); } /** * Get a list of users who have this permission, along with a list of roles through which each user has the permission. * * @return \UserFrosting\Sprinkle\Core\Database\Relations\BelongsToManyThrough */ public function users() { /** @var UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */ $classMapper = static::$ci->classMapper; return $this->belongsToManyThrough( $classMapper->getClassMapping('user'), $classMapper->getClassMapping('role'), 'permission_roles', 'permission_id', 'role_id', 'role_users', 'role_id', 'user_id' ); } }