Lewati ke konten

Pembantu Izin

XOOPS memiliki sistem izin yang kuat dan fleksibel berdasarkan keanggotaan grup pengguna. Pembantu Izin XMF menyederhanakan pekerjaan dengan izin ini, mengurangi pemeriksaan izin yang rumit menjadi panggilan metode tunggal.

Sistem izin XOOPS mengaitkan grup dengan:

  • ID module
  • Nama izin
  • ID barang

Memeriksa izin biasanya memerlukan pencarian grup pengguna, mencari ID module, dan menanyakan tabel izin. Pembantu Izin XMF menangani semua ini secara otomatis.

// For the current module
$permHelper = new \Xmf\Module\Helper\Permission();
// For a specific module
$permHelper = new \Xmf\Module\Helper\Permission('mymodule');

Helper secara otomatis menggunakan grup pengguna saat ini dan ID module yang ditentukan.

Periksa apakah pengguna saat ini memiliki izin khusus untuk suatu 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
}

Secara otomatis mengalihkan pengguna yang tidak memiliki izin:

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

Secara default, pengguna admin selalu memiliki izin. Untuk memeriksa bahkan untuk admin:

// Normal check - admins always have permission
$hasPermission = $permHelper->checkPermission('viewtopic', $id);
// Check even for admins (third parameter = false)
$hasPermission = $permHelper->checkPermission('viewtopic', $id, false);

Ambil semua ID item yang izinnya dimiliki oleh grup tertentu:

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

Temukan grup mana yang memiliki izin khusus:

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

Berikan izin kepada grup tertentu:

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

Menghapus semua izin untuk suatu item (biasanya saat menghapus item):

$permHelper = new \Xmf\Module\Helper\Permission();
$topicId = 42;
// Delete view permission for this topic
$permHelper->deletePermissionForItem('viewtopic', $topicId);

Untuk beberapa jenis izin:

// Delete multiple permission types at once
$permissionNames = ['viewtopic', 'posttopic', 'edittopic'];
$permHelper->deletePermissionForItem($permissionNames, $topicId);

Helper dapat membuat elemen formulir untuk memilih grup:

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

Tanda tangan metode lengkap:

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

Helper menghasilkan nama bidang yang konsisten:

$fieldName = $permHelper->defaultFieldName('viewtopic', 42);
// Returns something like: 'mymodule_viewtopic_42'
<?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');
}
MetodeDeskripsi
checkPermission($name, $itemId, $trueIfAdmin)Periksa apakah pengguna memiliki izin
checkPermissionRedirect($name, $itemId, $url, $time, $message, $trueIfAdmin)Periksa dan arahkan ulang jika ditolak
getItemIds($name, $groupIds)Dapatkan ID item yang dapat diakses grup
getGroupsForItem($name, $itemId)Dapatkan grup dengan izin
savePermissionForItem($name, $itemId, $groups)Simpan izin
deletePermissionForItem($name, $itemId)Hapus izin
getGroupSelectFormForItem(...)Buat elemen pilih formulir
defaultFieldName($name, $itemId)Dapatkan nama bidang formulir default
  • ../Basics/XMF-Module-Helper - Dokumentasi pembantu module
  • module-Admin-Halaman - Pembuatan antarmuka Admin
  • ../Basics/Getting-Started-with-XMF - Dasar-dasar XMF

#xmf #izin #keamanan #grup #forms