diff --git a/app/Auth/Permissions/PermissionService.php b/app/Auth/Permissions/PermissionService.php index d0e6cccea..fa375b4dd 100644 --- a/app/Auth/Permissions/PermissionService.php +++ b/app/Auth/Permissions/PermissionService.php @@ -556,6 +556,33 @@ class PermissionService return $q; } + /** + * Checks if a user has a book or chapter available to create a page + * @param Ownable $ownable + * @param $permission + * @return bool + */ + public function checkAvailableCreatePageAccess() + { + $userRoleIds = $this->currentUser()->roles()->pluck('id')->toArray(); + $userId = $this->currentUser()->id; + + + $canCreatePage = $this->db->table('joint_permissions') + ->where('action', '=', 'page-create') + ->whereIn('role_id', $userRoleIds) + ->where(function ($query) use ($userId) { + $query->where('has_permission', '=', 1) + ->orWhere(function ($query2) use ($userId) { + $query2->where('has_permission_own', '=', 1) + ->where('created_by', '=', $userId); + }); + }) + ->get()->count() > 0; + + return $canCreatePage; + } + /** * Check if an entity has restrictions set on itself or its * parent tree. diff --git a/app/helpers.php b/app/helpers.php index b0886d02b..383e25c15 100644 --- a/app/helpers.php +++ b/app/helpers.php @@ -65,6 +65,17 @@ function userCan($permission, Ownable $ownable = null) return $permissionService->checkOwnableUserAccess($ownable, $permission); } +/** + * Check if the current user has the ability to create a page for an existing object + * @return bool + */ +function userCanCreatePage() +{ + // Check for create page permissions + $permissionService = app(\BookStack\Auth\Permissions\PermissionService::class); + return $permissionService->checkAvailableCreatePageAccess(); +} + /** * Helper to access system settings. * @param $key diff --git a/resources/views/pages/show.blade.php b/resources/views/pages/show.blade.php index 19df337fc..011158dfb 100644 --- a/resources/views/pages/show.blade.php +++ b/resources/views/pages/show.blade.php @@ -17,11 +17,11 @@ @if(userCan('page-update', $page)) @icon('edit'){{ trans('common.edit') }} @endif - @if(userCan('page-create-own') || userCan('page-create-all') || userCan('page-update', $page) || userCan('restrictions-manage', $page) || userCan('page-delete', $page)) + @if((userCan('page-view', $page) && userCanCreatePage()) || userCan('page-update', $page) || userCan('restrictions-manage', $page) || userCan('page-delete', $page))