mirror of
https://github.com/typemill/typemill.git
synced 2025-07-26 00:31:38 +02:00
remove restricted pages from frontend navigation
This commit is contained in:
2
cache/timer.yaml
vendored
2
cache/timer.yaml
vendored
@@ -1,2 +1,2 @@
|
||||
licenseupdate: 1751827655
|
||||
refreshnavi: 1751919486
|
||||
refreshnavi: 1752315754
|
||||
|
@@ -1,6 +1,9 @@
|
||||
# Restricted Page
|
||||
|
||||
This is a restricted page (to activate the feature please read the paragraph below). Restricted pages are published pages that require an authentication to see the content. You can cut the content with a hr-line, everything below this line is not visible in frontend for unauthenticated users.
|
||||
This is a restricted page (to activate the feature please read the paragraph below). Restricted pages are published pages that require an authentication to see the content. You have several options:
|
||||
|
||||
* You can cut the content with a hr-line, everything below this line is not visible in frontend for unauthenticated users. This is great if you want to teaser the content and require authentication or even payment to read more.
|
||||
* You can completely remove the page from the navigation for users that are not allowed to see the page. neu
|
||||
|
||||
---
|
||||
|
||||
|
@@ -1,12 +1,13 @@
|
||||
meta:
|
||||
navtitle: restricted
|
||||
title: 'Restricted Page'
|
||||
description: 'This is a restricted page. Restricted pages are published pages that require an authentication to see the content. You can cut the content with a hr-line,'
|
||||
owner: typemill
|
||||
author: ''
|
||||
allowedrole: member
|
||||
allowedrole: manager
|
||||
alloweduser: ''
|
||||
modified: '2025-07-11'
|
||||
created: '2024-03-19'
|
||||
time: 18-56-07
|
||||
hide: false
|
||||
noindex: false
|
||||
modified: '2024-03-19'
|
||||
title: 'Restricted Page'
|
||||
description: 'This is a restricted page. Restricted pages are published pages that require an authentication to see the content. You can cut the content with a hr-line,'
|
||||
|
@@ -305,6 +305,10 @@ class ControllerApiAuthorMeta extends Controller
|
||||
($this->hasChanged($params['data'], $metadata['meta'], 'hide'))
|
||||
OR
|
||||
($this->hasChanged($params['data'], $metadata['meta'], 'noindex'))
|
||||
OR
|
||||
($this->hasChanged($params['data'], $metadata['meta'], 'alloweduser'))
|
||||
OR
|
||||
($this->hasChanged($params['data'], $metadata['meta'], 'allowedrole'))
|
||||
)
|
||||
{
|
||||
$navigation->clearNavigation([$naviFileName, $naviFileName . '-extended']);
|
||||
|
@@ -113,8 +113,23 @@ class ControllerWebFrontend extends Controller
|
||||
|
||||
$liveNavigation = $navigation->generateLiveNavigationFromDraft($draftNavigation);
|
||||
|
||||
# STRIP OUT HIDDEN PAGES
|
||||
$liveNavigation = $navigation->removeHiddenPages($liveNavigation);
|
||||
# STRIP OUT HIDDEN AND RESTRICTED PAGES
|
||||
$hidden = true;
|
||||
$restricted = false;
|
||||
if(
|
||||
isset($this->settings['pageaccess'])
|
||||
&& $this->settings['pageaccess']
|
||||
&& isset($this->settings['hiderestrictedpageslive'])
|
||||
&& $this->settings['hiderestrictedpageslive']
|
||||
)
|
||||
{
|
||||
$restricted = [
|
||||
'username' => $username,
|
||||
'userrole' => $userrole,
|
||||
'acl' => $username ? $this->c->get('acl') : false
|
||||
];
|
||||
}
|
||||
$liveNavigation = $navigation->removePages($liveNavigation, $hidden, $restricted);
|
||||
|
||||
# SET PAGEs ACTIVE
|
||||
$liveNavigation = $navigation->setActiveNaviItemsWithKeyPath($liveNavigation, $item->keyPathArray);
|
||||
@@ -352,7 +367,6 @@ class ControllerWebFrontend extends Controller
|
||||
return $this->c->get('view')->render($response, $route, $pagedata);
|
||||
}
|
||||
|
||||
|
||||
# checks if a page has a restriction in meta and if the current user is blocked by that restriction
|
||||
public function checkRestrictions($meta, $username, $userrole)
|
||||
{
|
||||
|
@@ -504,11 +504,26 @@ class Navigation extends Folder
|
||||
}
|
||||
|
||||
$extended[$item->urlRelWoF]['navtitle'] = isset($meta['meta']['navtitle']) ? $meta['meta']['navtitle'] : '';
|
||||
$extended[$item->urlRelWoF]['hide'] = isset($meta['meta']['hide']) ? $meta['meta']['hide'] : false;
|
||||
$extended[$item->urlRelWoF]['noindex'] = isset($meta['meta']['noindex']) ? $meta['meta']['noindex'] : false;
|
||||
$extended[$item->urlRelWoF]['path'] = $item->path;
|
||||
$extended[$item->urlRelWoF]['keyPath'] = $item->keyPath;
|
||||
|
||||
if(isset($meta['meta']['hide']) && $meta['meta']['hide'])
|
||||
{
|
||||
$extended[$item->urlRelWoF]['hide'] = $meta['meta']['hide'];
|
||||
}
|
||||
if(isset($meta['meta']['noindex']) && $meta['meta']['noindex'])
|
||||
{
|
||||
$extended[$item->urlRelWoF]['noindex'] = $meta['meta']['noindex'];
|
||||
}
|
||||
if(isset($meta['meta']['allowedrole']) && $meta['meta']['allowedrole'] )
|
||||
{
|
||||
$extended[$item->urlRelWoF]['allowedrole'] = $meta['meta']['allowedrole'];
|
||||
}
|
||||
if(isset($meta['meta']['alloweduser']) && $meta['meta']['alloweduser'] )
|
||||
{
|
||||
$extended[$item->urlRelWoF]['alloweduser'] = $meta['meta']['alloweduser'];
|
||||
}
|
||||
|
||||
if ($item->elementType == 'folder')
|
||||
{
|
||||
$extended = $this->generateExtendedFromDraft($item->folderContent, $extended);
|
||||
@@ -528,8 +543,22 @@ class Navigation extends Folder
|
||||
if($extendedNavigation && isset($extendedNavigation[$item->urlRelWoF]))
|
||||
{
|
||||
$item->name = ($extendedNavigation[$item->urlRelWoF]['navtitle'] != '') ? $extendedNavigation[$item->urlRelWoF]['navtitle'] : $item->name;
|
||||
$item->hide = ($extendedNavigation[$item->urlRelWoF]['hide'] === true) ? true : false;
|
||||
$item->noindex = (isset($extendedNavigation[$item->urlRelWoF]['noindex']) && $extendedNavigation[$item->urlRelWoF]['noindex'] === true) ? true : false;
|
||||
if(isset($extendedNavigation[$item->urlRelWoF]['hide']) && $extendedNavigation[$item->urlRelWoF]['hide'] === true)
|
||||
{
|
||||
$item->hide = true;
|
||||
}
|
||||
if(isset($extendedNavigation[$item->urlRelWoF]['noindex']) && $extendedNavigation[$item->urlRelWoF]['noindex'] === true)
|
||||
{
|
||||
$item->noindex = true;
|
||||
}
|
||||
if(isset($extendedNavigation[$item->urlRelWoF]['allowedrole']) && $extendedNavigation[$item->urlRelWoF]['allowedrole'])
|
||||
{
|
||||
$item->allowedrole = $extendedNavigation[$item->urlRelWoF]['allowedrole'];
|
||||
}
|
||||
if(isset($extendedNavigation[$item->urlRelWoF]['alloweduser']) && $extendedNavigation[$item->urlRelWoF]['alloweduser'])
|
||||
{
|
||||
$item->alloweduser = $extendedNavigation[$item->urlRelWoF]['alloweduser'];
|
||||
}
|
||||
}
|
||||
|
||||
if($item->elementType == 'folder')
|
||||
@@ -702,17 +731,76 @@ class Navigation extends Folder
|
||||
return false;
|
||||
}
|
||||
|
||||
public function removeHiddenPages($liveNavigation)
|
||||
public function removePages($liveNavigation, $hidden, $restricted)
|
||||
{
|
||||
foreach($liveNavigation as $key => $item)
|
||||
{
|
||||
if(isset($item->hide) && $item->hide == true)
|
||||
$removed = false;
|
||||
|
||||
if($hidden && (isset($item->hide) && $item->hide == true))
|
||||
{
|
||||
unset($liveNavigation[$key]);
|
||||
$removed = true;
|
||||
}
|
||||
elseif($item->elementType == 'folder' && !empty($item->folderContent))
|
||||
|
||||
if($restricted && !$removed)
|
||||
{
|
||||
$item->folderContent = $this->removeHiddenPages($item->folderContent);
|
||||
if(isset($item->alloweduser) && $item->alloweduser)
|
||||
{
|
||||
# if user is logged in
|
||||
if(is_array($restricted) && isset($restricted['username']) && $restricted['username'])
|
||||
{
|
||||
$alloweduser = array_map('trim', explode(",", $item->alloweduser));
|
||||
if(!in_array($restricted['username'], $alloweduser))
|
||||
{
|
||||
# user has no access to page
|
||||
unset($liveNavigation[$key]);
|
||||
$removed = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
# user is not logged in so should never have access
|
||||
unset($liveNavigation[$key]);
|
||||
$removed = true;
|
||||
}
|
||||
}
|
||||
elseif(isset($item->allowedrole))
|
||||
{
|
||||
# if user is logged in
|
||||
if(
|
||||
is_array($restricted)
|
||||
&& isset($restricted['userrole'])
|
||||
&& $restricted['userrole']
|
||||
&& isset($restricted['acl'])
|
||||
&& $restricted['acl']
|
||||
)
|
||||
{
|
||||
$userrole = $restricted['userrole'];
|
||||
$acl = $restricted['acl'];
|
||||
|
||||
if(
|
||||
$userrole !== 'administrator'
|
||||
AND $userrole !== $item->allowedrole
|
||||
AND !$acl->inheritsRole($userrole, $item->allowedrole)
|
||||
)
|
||||
{
|
||||
# user has no access to page
|
||||
unset($liveNavigation[$key]);
|
||||
$removed = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($liveNavigation[$key]);
|
||||
$removed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!$removed && ($item->elementType == 'folder') && !empty($item->folderContent))
|
||||
{
|
||||
$item->folderContent = $this->removePages($item->folderContent, $hidden, $restricted);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -155,6 +155,11 @@ fieldsetaccess:
|
||||
type: checkbox
|
||||
label: 'Page restriction'
|
||||
checkboxlabel: 'Activate individual restrictions for pages in the meta-tab of each page.'
|
||||
hiderestrictedpageslive:
|
||||
type: checkbox
|
||||
label: 'Hide Restricted Pages in Frontend'
|
||||
checkboxlabel: 'Hide restricted pages in the navigation for users without rights in frontend.'
|
||||
description: 'Be aware that this feature can slow down performance for large websites with many pages.'
|
||||
hrdelimiter:
|
||||
type: checkbox
|
||||
label: 'Content break'
|
||||
|
Reference in New Issue
Block a user