diff --git a/app/Auth/Permissions/PermissionService.php b/app/Auth/Permissions/PermissionService.php index b28f59cc5..33d214963 100644 --- a/app/Auth/Permissions/PermissionService.php +++ b/app/Auth/Permissions/PermissionService.php @@ -557,19 +557,17 @@ class PermissionService } /** - * Checks if a user has a book or chapter available to create a page - * @param Ownable $ownable - * @param $permission + * Checks if a user has the given permission for any items in the system. + * @param string $permission * @return bool */ - public function checkAvailableCreatePageAccess() + public function checkUserHasPermissionOnAnything(string $permission) { - $userRoleIds = $this->currentUser()->roles()->pluck('id')->toArray(); + $userRoleIds = $this->currentUser()->roles()->select('id')->pluck('id')->toArray(); $userId = $this->currentUser()->id; - $canCreatePage = $this->db->table('joint_permissions') - ->where('action', '=', 'page-create') + ->where('action', '=', $permission) ->whereIn('role_id', $userRoleIds) ->where(function ($query) use ($userId) { $query->where('has_permission', '=', 1) @@ -580,6 +578,7 @@ class PermissionService }) ->get()->count() > 0; + $this->clean(); return $canCreatePage; } diff --git a/app/helpers.php b/app/helpers.php index 383e25c15..0825a2e4a 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -1,5 +1,6 @@ can($permission); } // Check permission on ownable item - $permissionService = app(\BookStack\Auth\Permissions\PermissionService::class); + $permissionService = app(PermissionService::class); return $permissionService->checkOwnableUserAccess($ownable, $permission); } /** - * Check if the current user has the ability to create a page for an existing object + * Check if the current user has the given permission + * on any item in the system. + * @param string $permission * @return bool */ -function userCanCreatePage() +function userCanOnAny(string $permission) { - // Check for create page permissions - $permissionService = app(\BookStack\Auth\Permissions\PermissionService::class); - return $permissionService->checkAvailableCreatePageAccess(); + $permissionService = app(PermissionService::class); + return $permissionService->checkUserHasPermissionOnAnything($permission); } /** diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 6f221edee..db2f1462e 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -17,14 +17,14 @@ @if(userCan('page-update', $page)) @icon('edit'){{ trans('common.edit') }} @endif - @if((userCan('page-view', $page) && userCanCreatePage()) || userCan('page-update', $page) || userCan('restrictions-manage', $page) || userCan('page-delete', $page)) + @if((userCan('page-view', $page) && userCanOnAny('page-create')) || userCan('page-update', $page) || userCan('restrictions-manage', $page) || userCan('page-delete', $page))