BookStack\Services\PermissionService::filterRestrictedEntityRelations PHP Метод

filterRestrictedEntityRelations() публичный Метод

Filter items that have entities set a a polymorphic relation.
public filterRestrictedEntityRelations ( $query, string $tableName, string $entityIdColumn, string $entityTypeColumn ) : mixed
$query
$tableName string
$entityIdColumn string
$entityTypeColumn string
Результат mixed
    public function filterRestrictedEntityRelations($query, $tableName, $entityIdColumn, $entityTypeColumn)
    {
        if ($this->isAdmin()) {
            $this->clean();
            return $query;
        }
        $this->currentAction = 'view';
        $tableDetails = ['tableName' => $tableName, 'entityIdColumn' => $entityIdColumn, 'entityTypeColumn' => $entityTypeColumn];
        $q = $query->where(function ($query) use($tableDetails) {
            $query->whereExists(function ($permissionQuery) use(&$tableDetails) {
                $permissionQuery->select('id')->from('joint_permissions')->whereRaw('joint_permissions.entity_id=' . $tableDetails['tableName'] . '.' . $tableDetails['entityIdColumn'])->whereRaw('joint_permissions.entity_type=' . $tableDetails['tableName'] . '.' . $tableDetails['entityTypeColumn'])->where('action', '=', $this->currentAction)->whereIn('role_id', $this->getRoles())->where(function ($query) {
                    $query->where('has_permission', '=', true)->orWhere(function ($query) {
                        $query->where('has_permission_own', '=', true)->where('created_by', '=', $this->currentUser()->id);
                    });
                });
            });
        });
        return $q;
    }