Gå til indhold

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.

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.

// 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.

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
}

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 permission
displayTopic($topicId);

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);

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');

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)

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);

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);

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'));

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)
)
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);

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”
<?php
use 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';
<?php
use 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 permission
if ($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';
<?php
use 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');
}
MetodeBeskrivelse
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
  • ../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