mirror of
https://github.com/BookStackApp/BookStack.git
synced 2024-11-26 18:30:50 +08:00
Found a sql having-style approach to permissions
As a way to check aggregate queries for required changes to need to analyse across combined permission values.
This commit is contained in:
parent
91e613fe60
commit
7d74575eb8
|
@ -94,10 +94,14 @@ class PermissionApplicator
|
||||||
{
|
{
|
||||||
return $query->where(function (Builder $parentQuery) {
|
return $query->where(function (Builder $parentQuery) {
|
||||||
$parentQuery->whereHas('jointPermissions', function (Builder $permissionQuery) {
|
$parentQuery->whereHas('jointPermissions', function (Builder $permissionQuery) {
|
||||||
$permissionQuery->whereIn('role_id', $this->getCurrentUserRoleIds())
|
$permissionQuery->select(['entity_id', 'entity_type'])
|
||||||
->where(function (Builder $query) {
|
->selectRaw('max(owned_by) as owned_by')
|
||||||
$this->addJointHasPermissionCheck($query, $this->currentUser()->id);
|
->selectRaw('max(has_permission) as has_permission')
|
||||||
});
|
->selectRaw('max(has_permission_own) as has_permission_own')
|
||||||
|
->whereIn('role_id', $this->getCurrentUserRoleIds())
|
||||||
|
->groupBy(['entity_type', 'entity_id'])
|
||||||
|
->havingRaw('has_permission > 0')
|
||||||
|
->orHavingRaw('(has_permission_own > 0 and owned_by = ?)', [$this->currentUser()->id]);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user