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.
Ikhtisar
Section titled “Ikhtisar”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.
Memulai
Section titled “Memulai”Membuat Pembantu Izin
Section titled “Membuat Pembantu Izin”// 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.
Memeriksa Izin
Section titled “Memeriksa Izin”Apakah Pengguna Memiliki Izin?
Section titled “Apakah Pengguna Memiliki Izin?”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}Periksa dengan Pengalihan
Section titled “Periksa dengan Pengalihan”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 permissiondisplayTopic($topicId);Penggantian Admin
Section titled “Penggantian Admin”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);Dapatkan ID Item yang Diizinkan
Section titled “Dapatkan ID Item yang Diizinkan”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');Mengelola Izin
Section titled “Mengelola Izin”Dapatkan Grup untuk suatu Item
Section titled “Dapatkan Grup untuk suatu Item”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)Simpan Izin
Section titled “Simpan Izin”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);Hapus Izin
Section titled “Hapus Izin”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);Integrasi Formulir
Section titled “Integrasi Formulir”Menambahkan Pilihan Izin ke Formulir
Section titled “Menambahkan Pilihan Izin ke Formulir”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'));Opsi Elemen Formulir
Section titled “Opsi Elemen Formulir”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))Memproses Pengiriman Formulir
Section titled “Memproses Pengiriman Formulir”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);Nama Bidang Default
Section titled “Nama Bidang Default”Helper menghasilkan nama bidang yang konsisten:
$fieldName = $permHelper->defaultFieldName('viewtopic', 42);// Returns something like: 'mymodule_viewtopic_42'Contoh Lengkap: Item yang Dilindungi Izin
Section titled “Contoh Lengkap: Item yang Dilindungi Izin”Membuat Item dengan Izin
Section titled “Membuat Item dengan Izin”<?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';Melihat dengan Pemeriksaan Izin
Section titled “Melihat dengan Pemeriksaan Izin”<?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';Menghapus dengan Pembersihan Izin
Section titled “Menghapus dengan Pembersihan Izin”<?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');}Referensi API
Section titled “Referensi API”| Metode | Deskripsi |
|---|---|
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 |
Lihat Juga
Section titled “Lihat Juga”- ../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