$activityList = $this->permissions
->restrictEntityRelationQuery($query, 'activities', 'entity_id', 'entity_type')
->orderBy('created_at', 'desc')
+ ->whereNotNull('activities.entity_id')
->with(['user', 'entity'])
->skip($count * $page)
->take($count)
->restrictEntityRelationQuery($query, 'activities', 'entity_id', 'entity_type')
->orderBy('created_at', 'desc')
->where('user_id', '=', $user->id)
+ ->whereNotNull('activities.entity_id')
->skip($count * $page)
->take($count)
->get();
$this->applyFallbackJoin($query, $queryTable, $entityTypeLimiter, $entityIdColumn, $entityTypeColumn);
$this->applyRoleJoin($query, $queryTable, $entityTypeLimiter, $entityIdColumn, $entityTypeColumn);
$this->applyUserJoin($query, $queryTable, $entityTypeLimiter, $entityIdColumn, $entityTypeColumn);
- $this->applyPermissionWhereFilter($query, $entityTypeLimiter, $entityTypeColumn);
+ $this->applyPermissionWhereFilter($query, $queryTable, $entityTypeLimiter, $entityTypeColumn);
}
/**
* Both should not be applied since that would conflict upon intent.
* @param Builder|QueryBuilder $query
*/
- protected function applyPermissionWhereFilter($query, string $entityTypeLimiter, string $entityTypeColumn)
+ protected function applyPermissionWhereFilter($query, string $queryTable, string $entityTypeLimiter, string $entityTypeColumn)
{
$abilities = ['all' => [], 'own' => []];
$types = $entityTypeLimiter ? [$entityTypeLimiter] : ['page', 'chapter', 'bookshelf', 'book'];
+ $fullEntityTypeColumn = $queryTable . '.' . $entityTypeColumn;
foreach ($types as $type) {
$abilities['all'][$type] = userCan($type . '-view-all');
$abilities['own'][$type] = userCan($type . '-view-own');
$abilities['all'] = array_filter($abilities['all']);
$abilities['own'] = array_filter($abilities['own']);
- $query->where(function (Builder $query) use ($abilities, $entityTypeColumn) {
+ $query->where(function (Builder $query) use ($abilities, $fullEntityTypeColumn) {
$query->where('perms_user', '=', 1)
->orWhere(function (Builder $query) {
$query->whereNull('perms_user')->where('perms_role', '=', 1);
});
if (count($abilities['all']) > 0) {
- $query->orWhere(function (Builder $query) use ($abilities, $entityTypeColumn) {
+ $query->orWhere(function (Builder $query) use ($abilities, $fullEntityTypeColumn) {
$query->whereNull(['perms_user', 'perms_role', 'perms_fallback']);
- if ($entityTypeColumn) {
- $query->whereIn($entityTypeColumn, array_keys($abilities['all']));
+ if ($fullEntityTypeColumn) {
+ $query->whereIn($fullEntityTypeColumn, array_keys($abilities['all']));
}
});
}
if (count($abilities['own']) > 0) {
- $query->orWhere(function (Builder $query) use ($abilities, $entityTypeColumn) {
+ $query->orWhere(function (Builder $query) use ($abilities, $fullEntityTypeColumn) {
$query->whereNull(['perms_user', 'perms_role', 'perms_fallback'])
->where('owned_by', '=', $this->currentUser()->id);
- if ($entityTypeColumn) {
- $query->whereIn($entityTypeColumn, array_keys($abilities['all']));
+ if ($fullEntityTypeColumn) {
+ $query->whereIn($fullEntityTypeColumn, array_keys($abilities['all']));
}
});
}