站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
在Xoops模块中添加组权限
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
__NOTOC__ <span style="text-align:center; border:1px solid #000; float:right; padding:6px;"><strong>导航:</strong> [[Xoops模块开发之模块的辅助特性|上一页]] | {{Template:Xoops导航}}</span> <div style="clear:both;"></div> ===管理员端=== '''添加权限''' 一些初始设置(/modules/foo/admin/index.php) <pre> include '../../../include/cp_header.php'; include_once XOOPS_ROOT_PATH.'/class/xoopsform/grouppermform.php'; $module_id = $xoopsModule->getVar('mid'); </pre> 我们将要设置权限的条目的列表。 大多数情况下,这个将从数据库中检索得到。在这里我们使用静态数组做例子。 <pre> <?php $item_list = array('1' => 'Category 1', '2' => 'Category 2', '3' => 'Category 3'); //组权限表单的标题 $title_of_form = 'Permission form for my module'; //权限名称在该模块中应该是唯一的 $perm_name = 'category_permission'; //权限的一个简短描述 $perm_desc = 'Select categories that each group is allowed to view'; //创建及显示表单 $form = new XoopsGroupPermForm($title_of_form, $module_id, $perm_name, $perm_desc); foreach ($item_list as $item_id => $item_name) { $form->addItem($item_id, $item_name); } xoops_cp_header(); echo $form->render(); xoops_cp_footer(); ?> </pre> 然后会显示如下图的表单,周围是XOOPS管理面板: <div> [[Image:xop53.png]] </div> 权限设置通过表单提交,该表单会被/modules/system/admin/groupperm.php自动存储在[[数据库]]中。 '''删除权限''' 如果你从模块中删除了一个条目(例如:删除了一个分类,一个主题),你必须删除该条目的所有组权限。 可以直接调用函数: xoops_groupperm_deletebymoditem ($module_id, $perm_name, $item_id); * $module_id:模块ID (必需的) * $perm_name:权限名称(可选的) * $item_id:删除条目的ID (可选的) ===用户端=== '''获取当前条目ID''' 假如一个用户通过[[HTTP]] GET方式请求一个分类的内容,变量$_GET['category_id']将被用来识别请求的分类。 该条目唯一的ID将用于校验权限: <pre> $perm_itemid = intval($_GET['category_id']); </pre> '''指定将要校验的权限''' 一般情况下这是管理员创建的一个权限名称。 <pre> $perm_name = 'Category Permission'; </pre> '''获取当前用户所属群组ID''' <pre> if ($xoopsUser) { $groups = $xoopsUser->getGroups(); } else { $groups = XOOPS_GROUP_ANONYMOUS; } </pre> '''获取当前模块ID''' <pre> $module_id = $xoopsModule->getVar('mid'); </pre> '''得到组权限的句柄''' <pre> $gperm_handler =& xoops_gethandler('groupperm'); </pre> '''检查当前用户对当前条目的权限''' 通过访问句柄类的checkRight()方法检查当前用户是否可以使用该分类。 <pre> if ($gperm_handler->checkRight($perm_name, $perm_itemid, $groups, $module_id)) { //allowed, so display contents within the category } else { //not allowed, display an error message or redirect to another page } </pre> ===高级话题:树结构权限处理=== 如果条目需要校验有父子树结构的权限,条目的父节点ID作为XoopsGroupForm::addItem() 方法的第三个参数提供。 操作XoopsGroupForm类会生成一个以树型结构显示每个条目的表单。一个条目的权限只有在赋予了与其父节点同样的权限时才可能被添加。 假设我们的分类有如下的树型结构: <pre> Category 1 (ID: 1) +++ Category 2 (ID: 2) ++++++ Category 3 (ID: 3) ++++++ Category 4 (ID: 4) +++++++++ Category 6 (ID: 6) +++ Category 5 (ID: 5) ++++++ Category 8 (ID: 8) Category 7 (ID: 7) +++ Category 9 (ID: 9) ++++++ Category 14 (ID: 14) Category 10 (ID: 10) +++ Category 11 (ID: 11) +++ Category 13 (ID: 13) Category 12 (ID: 12) </pre> 上述的分类结构可以用如下的一个数组表现: <pre> $categories[1] = array('name' => 'Category 1', 'parent' => 0); $categories[2] = array('name' => 'Category 2', 'parent' => 1); $categories[3] = array('name' => 'Category 3', 'parent' => 2); $categories[4] = array('name' => 'Category 4', 'parent' => 2); $categories[5] = array('name' => 'Category 5', 'parent' => 1); $categories[6] = array('name' => 'Category 6', 'parent' => 4); $categories[7] = array('name' => 'Category 7', 'parent' => 0); $categories[8] = array('name' => 'Category 8', 'parent' => 5); $categories[9] = array('name' => 'Category 9', 'parent' => 7); $categories[10] = array('name' => 'Category 10', 'parent' => 0); $categories[11] = array('name' => 'Category 11', 'parent' => 10); $categories[12] = array('name' => 'Category 12', 'parent' => 0); $categories[13] = array('name' => 'Category 13', 'parent' => 10); $categories[14] = array('name' => 'Category 14', 'parent' => 9); </pre> 当我们添加一个条目到组权限表单,必须提供它的父节点ID作为第三个参数 <pre> ,pre> foreach ($categories as $cat_id => $cat_data) { $form->addItem($cat_id, $cat_data['name'], $cat_data['parent']); } </pre> </pre> 如果$cat_id或$cat_data['parent']被[[MySQL]]补零,请不要忘记在$form->addItem()前要对其进行intval()操作。 这将生成如下的一个表单: <div> [[Image:xop54.png]] </div> 当该表单被提交,提交的数据将会被验证,所以条目的权限在没有给其父节点相同的权限的情况下是不会被授权的。该验证既要通过[[客户端]] ([[javascript]])也要通过[[服务器端]]([[php]])的验证。因此,在模块的用户方面,没有必要检查请求的条目的父节点条目的权限,只要检查被请求的条目即可。 [[category:Xoops模块开发指南]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:Xoops导航
(
编辑
)