Toestemmingshulp
XOOPS heeft een krachtig en flexibel toestemmingssysteem gebaseerd op lidmaatschap van een gebruikersgroep. De XMF Permission Helper vereenvoudigt het werken met deze machtigingen, waardoor complexe machtigingscontroles worden teruggebracht tot aanroepen van één methode.
Overzicht
Section titled “Overzicht”Het XOOPS-machtigingssysteem koppelt groepen aan:
- Module-ID
- Toestemmingsnaam
- Artikel-ID
Het controleren van machtigingen vereist traditioneel het vinden van gebruikersgroepen, het opzoeken van module-ID’s en het doorzoeken van de machtigingstabellen. De XMF Permission Helper handelt dit allemaal automatisch af.
Aan de slag
Section titled “Aan de slag”Een toestemmingshelper maken
Section titled “Een toestemmingshelper maken”// For the current module$permHelper = new \Xmf\Module\Helper\Permission();
// For a specific module$permHelper = new \Xmf\Module\Helper\Permission('mymodule');De helper gebruikt automatisch de huidige gebruikersgroepen en de opgegeven module-ID.
Machtigingen controleren
Section titled “Machtigingen controleren”Heeft de gebruiker toestemming?
Section titled “Heeft de gebruiker toestemming?”Controleer of de huidige gebruiker specifieke rechten heeft voor een item:
$permHelper = new \Xmf\Module\Helper\Permission();
// Check if user can view topic ID 42$canView = $permHelper->checkPermission('viewtopic', 42);
if ($canView) { // Display the topic} else { // Show access denied message}Controleer met omleiding
Section titled “Controleer met omleiding”Gebruikers die geen toestemming hebben automatisch omleiden:
$permHelper = new \Xmf\Module\Helper\Permission();$topicId = 42;
// Redirects to index.php after 3 seconds if no permission$permHelper->checkPermissionRedirect( 'viewtopic', $topicId, 'index.php', 3, 'You are not allowed to view that topic');
// Code here only runs if user has permissiondisplayTopic($topicId);Beheerder negeren
Section titled “Beheerder negeren”Standaard hebben beheerders altijd toestemming. Om zelfs voor beheerders te controleren:
// Normal check - admins always have permission$hasPermission = $permHelper->checkPermission('viewtopic', $id);
// Check even for admins (third parameter = false)$hasPermission = $permHelper->checkPermission('viewtopic', $id, false);Toegestane artikel-ID’s verkrijgen
Section titled “Toegestane artikel-ID’s verkrijgen”Haal alle item-ID’s op waarvoor specifieke groepen toestemming hebben:
// Get items the current user's groups can view$viewableIds = $permHelper->getItemIds('viewtopic', $GLOBALS['xoopsUser']->getGroups());
// Get items a specific group can view$viewableIds = $permHelper->getItemIds('viewtopic', [XOOPS_GROUP_USERS]);
// Use in queries$criteria = new Criteria('topic_id', '(' . implode(',', $viewableIds) . ')', 'IN');Machtigingen beheren
Section titled “Machtigingen beheren”Groepen voor een item ophalen
Section titled “Groepen voor een item ophalen”Ontdek welke groepen een specifiek recht hebben:
$permHelper = new \Xmf\Module\Helper\Permission();
// Get groups that can view topic 42$groups = $permHelper->getGroupsForItem('viewtopic', 42);// Returns: [1, 2, 5](array of group IDs)Machtigingen opslaan
Section titled “Machtigingen opslaan”Toestemming verlenen aan specifieke groepen:
$permHelper = new \Xmf\Module\Helper\Permission();
// Allow groups 1, 2, and 3 to view topic 42$groups = [1, 2, 3];$permHelper->savePermissionForItem('viewtopic', 42, $groups);Machtigingen verwijderen
Section titled “Machtigingen verwijderen”Alle machtigingen voor een item verwijderen (meestal bij het verwijderen van het item):
$permHelper = new \Xmf\Module\Helper\Permission();$topicId = 42;
// Delete view permission for this topic$permHelper->deletePermissionForItem('viewtopic', $topicId);Voor meerdere machtigingstypen:
// Delete multiple permission types at once$permissionNames = ['viewtopic', 'posttopic', 'edittopic'];$permHelper->deletePermissionForItem($permissionNames, $topicId);Formulierintegratie
Section titled “Formulierintegratie”Toestemmingsselectie toevoegen aan formulieren
Section titled “Toestemmingsselectie toevoegen aan formulieren”De helper kan een formulierelement maken voor het selecteren van groepen:
$permHelper = new \Xmf\Module\Helper\Permission();
// Build your form$form = new XoopsThemeForm('Edit Topic', 'topicform', 'save.php');
// Add title field, etc.$form->addElement(new XoopsFormText('Title', 'title', 50, 255, $topic->getVar('title')));
// Add permission selector$form->addElement( $permHelper->getGroupSelectFormForItem( 'viewtopic', // Permission name $topicId, // Item ID 'Groups with View Topic Permission' // Caption ));
$form->addElement(new XoopsFormButton('', 'submit', 'Save', 'submit'));Opties voor formulierelementen
Section titled “Opties voor formulierelementen”De volledige handtekening van de methode:
getGroupSelectFormForItem( $gperm_name, // Permission name $gperm_itemid, // Item ID $caption, // Form element caption $name, // Element name (auto-generated if empty) $include_anon, // Include anonymous group (default: false) $size, // Number of visible rows (default: 5) $multiple // Allow multiple selection (default: true))Verwerking formulierinzending
Section titled “Verwerking formulierinzending”use Xmf\Request;
$permHelper = new \Xmf\Module\Helper\Permission();$topicId = Request::getInt('topic_id', 0);
// Get the auto-generated field name$fieldName = $permHelper->defaultFieldName('viewtopic', $topicId);
// Get selected groups from form$selectedGroups = Request::getArray($fieldName, [], 'POST');
// Save the permissions$permHelper->savePermissionForItem('viewtopic', $topicId, $selectedGroups);Standaardveldnaam
Section titled “Standaardveldnaam”De helper genereert consistente veldnamen:
$fieldName = $permHelper->defaultFieldName('viewtopic', 42);// Returns something like: 'mymodule_viewtopic_42'Volledig voorbeeld: met toestemming beveiligde items
Section titled “Volledig voorbeeld: met toestemming beveiligde items”Een item met machtigingen maken
Section titled “Een item met machtigingen maken”<?phpuse Xmf\Request;use Xmf\Module\Helper;use Xmf\Module\Helper\Permission;
require_once dirname(dirname(__DIR__)) . '/mainfile.php';require_once XOOPS_ROOT_PATH . '/header.php';
$helper = Helper::getHelper('mymodule');$permHelper = new Permission('mymodule');
$op = Request::getCmd('op', 'form');$itemId = Request::getInt('id', 0);
switch ($op) { case 'save': // Save item data $handler = $helper->getHandler('items');
if ($itemId > 0) { $item = $handler->get($itemId); } else { $item = $handler->create(); }
$item->setVar('title', Request::getString('title', '')); $item->setVar('content', Request::getText('content', ''));
if ($handler->insert($item)) { $newId = $item->getVar('item_id');
// Save view permission $viewFieldName = $permHelper->defaultFieldName('view', $newId); $viewGroups = Request::getArray($viewFieldName, [], 'POST'); $permHelper->savePermissionForItem('view', $newId, $viewGroups);
// Save edit permission $editFieldName = $permHelper->defaultFieldName('edit', $newId); $editGroups = Request::getArray($editFieldName, [], 'POST'); $permHelper->savePermissionForItem('edit', $newId, $editGroups);
redirect_header('index.php', 2, 'Item saved'); } break;
case 'form': default: $handler = $helper->getHandler('items');
if ($itemId > 0) { $item = $handler->get($itemId); } else { $item = $handler->create(); $itemId = 0; }
$form = new XoopsThemeForm('Edit Item', 'itemform', 'edit.php'); $form->addElement(new XoopsFormHidden('op', 'save')); $form->addElement(new XoopsFormHidden('id', $itemId));
$form->addElement(new XoopsFormText('Title', 'title', 50, 255, $item->getVar('title'))); $form->addElement(new XoopsFormTextArea('Content', 'content', $item->getVar('content')));
// View permission selector $form->addElement( $permHelper->getGroupSelectFormForItem('view', $itemId, 'Groups that can view') );
// Edit permission selector $form->addElement( $permHelper->getGroupSelectFormForItem('edit', $itemId, 'Groups that can edit') );
$form->addElement(new XoopsFormButton('', 'submit', 'Save', 'submit'));
$form->display(); break;}
require_once XOOPS_ROOT_PATH . '/footer.php';Bekijken met toestemmingscontrole
Section titled “Bekijken met toestemmingscontrole”<?phpuse Xmf\Request;use Xmf\Module\Helper;use Xmf\Module\Helper\Permission;
require_once dirname(dirname(__DIR__)) . '/mainfile.php';
$helper = Helper::getHelper('mymodule');$permHelper = new Permission('mymodule');
$itemId = Request::getInt('id', 0);
// Check view permission - redirects if denied$permHelper->checkPermissionRedirect( 'view', $itemId, 'index.php', 3, 'You do not have permission to view this item');
require_once XOOPS_ROOT_PATH . '/header.php';
// User has permission, display the item$handler = $helper->getHandler('items');$item = $handler->get($itemId);
$xoopsTpl->assign('item', $item->toArray());
// Show edit button only if user has edit permissionif ($permHelper->checkPermission('edit', $itemId)) { $xoopsTpl->assign('can_edit', true); $xoopsTpl->assign('edit_url', $helper->url('edit.php?id=' . $itemId));}
require_once XOOPS_ROOT_PATH . '/footer.php';Verwijderen met toestemmingsopschoning
Section titled “Verwijderen met toestemmingsopschoning”<?phpuse Xmf\Request;use Xmf\Module\Helper;use Xmf\Module\Helper\Permission;
$helper = Helper::getHelper('mymodule');$permHelper = new Permission('mymodule');
$itemId = Request::getInt('id', 0);
// Delete the item$handler = $helper->getHandler('items');$item = $handler->get($itemId);
if ($item && $handler->delete($item)) { // Clean up all permissions for this item $permissionNames = ['view', 'edit', 'delete']; $permHelper->deletePermissionForItem($permissionNames, $itemId);
redirect_header('index.php', 2, 'Item deleted');}API-referentie
Section titled “API-referentie”| Werkwijze | Beschrijving |
|---|---|
checkPermission($name, $itemId, $trueIfAdmin) | Controleer of gebruiker toestemming heeft |
checkPermissionRedirect($name, $itemId, $url, $time, $message, $trueIfAdmin) | Controleer en stuur door indien geweigerd |
getItemIds($name, $groupIds) | Artikel-ID’s ophalen waartoe groepen toegang hebben |
getGroupsForItem($name, $itemId) | Groepen met toestemming verkrijgen |
savePermissionForItem($name, $itemId, $groups) | Machtigingen opslaan |
deletePermissionForItem($name, $itemId) | Machtigingen verwijderen |
getGroupSelectFormForItem(...) | Formulierselectie-element maken |
defaultFieldName($name, $itemId) | Standaardformulierveldnaam ophalen |
Zie ook
Section titled “Zie ook”- ../Basics/XMF-Module-Helper - Documentatie voor modulehelper
- Module-Admin-Pagina’s - Creatie van een beheerdersinterface
- ../Basis/Aan de slag met-XMF - Basisprincipes van XMF
#xmf #permissions #security #groups #forms