Tilladelseshjælper
XOOPS har et kraftfuldt og fleksibelt tilladelsessystem baseret på brugergruppemedlemskab. XMF Permission Helper forenkler arbejdet med disse tilladelser og reducerer komplekse tilladelsestjek til enkeltmetodekald.
Oversigt
Sektion kaldt “Oversigt”Tilladelsessystemet XOOPS knytter grupper til:
- Modul ID
- Tilladelsesnavn
- Vare-id
Kontrol af tilladelser kræver traditionelt at finde brugergrupper, slå modul-id’er op og forespørge i tilladelsestabellerne. XMF Permission Helper håndterer alt dette automatisk.
Kom godt i gang
Sektion kaldt “Kom godt i gang”Oprettelse af en tilladelseshjælper
Sektion kaldt “Oprettelse af en tilladelseshjælper”// For the current module$permHelper = new \Xmf\Module\Helper\Permission();
// For a specific module$permHelper = new \Xmf\Module\Helper\Permission('mymodule');Hjælperen bruger automatisk den aktuelle brugers grupper og det angivne moduls ID.
Kontrollerer tilladelser
Sektion kaldt “Kontrollerer tilladelser”Har brugeren tilladelse?
Sektion kaldt “Har brugeren tilladelse?”Tjek, om den aktuelle bruger har en specifik tilladelse til et element:
$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}Tjek med omdirigering
Sektion kaldt “Tjek med omdirigering”Omdiriger automatisk brugere, der mangler tilladelse:
$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);Admin Tilsidesættelse
Sektion kaldt “Admin Tilsidesættelse”Som standard har admin-brugere altid tilladelse. Sådan tjekker du selv for administratorer:
// Normal check - admins always have permission$hasPermission = $permHelper->checkPermission('viewtopic', $id);
// Check even for admins (third parameter = false)$hasPermission = $permHelper->checkPermission('viewtopic', $id, false);Få tilladte vare-id’er
Sektion kaldt “Få tilladte vare-id’er”Hent alle vare-id’er, som specifikke grupper har tilladelse til:
// 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');Håndtering af tilladelser
Sektion kaldt “Håndtering af tilladelser”Få grupper for en vare
Sektion kaldt “Få grupper for en vare”Find, hvilke grupper der har en specifik tilladelse:
$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)Gem tilladelser
Sektion kaldt “Gem tilladelser”Giv tilladelse til specifikke grupper:
$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);Slet tilladelser
Sektion kaldt “Slet tilladelser”Fjern alle tilladelser for et element (typisk ved sletning af elementet):
$permHelper = new \Xmf\Module\Helper\Permission();$topicId = 42;
// Delete view permission for this topic$permHelper->deletePermissionForItem('viewtopic', $topicId);For flere tilladelsestyper:
// Delete multiple permission types at once$permissionNames = ['viewtopic', 'posttopic', 'edittopic'];$permHelper->deletePermissionForItem($permissionNames, $topicId);Form Integration
Sektion kaldt “Form Integration”Tilføjelse af tilladelsesvalg til formularer
Sektion kaldt “Tilføjelse af tilladelsesvalg til formularer”Hjælperen kan oprette et formularelement til valg af grupper:
$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'));Formelementindstillinger
Sektion kaldt “Formelementindstillinger”Hele metodesignaturen:
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))Behandler formularindsendelse
Sektion kaldt “Behandler formularindsendelse”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);Standard feltnavn
Sektion kaldt “Standard feltnavn”Hjælperen genererer konsistente feltnavne:
$fieldName = $permHelper->defaultFieldName('viewtopic', 42);// Returns something like: 'mymodule_viewtopic_42'Komplet eksempel: Tilladelsesbeskyttede genstande
Sektion kaldt “Komplet eksempel: Tilladelsesbeskyttede genstande”Oprettelse af et element med tilladelser
Sektion kaldt “Oprettelse af et element med tilladelser”<?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';Visning med tilladelseskontrol
Sektion kaldt “Visning med tilladelseskontrol”<?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';Sletter med tilladelse Oprydning
Sektion kaldt “Sletter med tilladelse Oprydning”<?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 Reference
Sektion kaldt “API Reference”| Metode | Beskrivelse |
|---|---|
checkPermission($name, $itemId, $trueIfAdmin) | Tjek om brugeren har tilladelse |
checkPermissionRedirect($name, $itemId, $url, $time, $message, $trueIfAdmin) | Tjek og omdiriger hvis afvist |
getItemIds($name, $groupIds) | Hent vare-id’er, grupper kan få adgang til |
getGroupsForItem($name, $itemId) | Få grupper med tilladelse |
savePermissionForItem($name, $itemId, $groups) | Gem tilladelser |
deletePermissionForItem($name, $itemId) | Slet tilladelser |
getGroupSelectFormForItem(...) | Opret formular vælg element |
defaultFieldName($name, $itemId) | Hent standard formularfeltnavn |
Se også
Sektion kaldt “Se også”- ../Basics/XMF-Module-Helper - Modulhjælper dokumentation
- Modul-Admin-Pages - Oprettelse af administratorgrænseflade
- ../Basics/Getting-Started-with-XMF - XMF grundlæggende
#xmf #tilladelser #sikkerhed #grupper #formularer