您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
PHPCMSv9修改栏目或者单页没有权限的解决方法
尤介辉2025-06-09phpcms教程已有人查阅
导读问题:普通管理员没有权限修改栏目,只有超级管理员才有权限修改,凡是非超级管理员,设置栏目权限后只能添加栏目,不能对栏目进行修改和删除操作,提示您没有权限操作该项这使系统的
问题:
普通管理员没有权限修改栏目,只有超级管理员才有权限修改,凡是非超级管理员,设置栏目权限后只能添加栏目,不能对栏目进行修改和删除操作,提示您没有权限操作该项这使系统的一个BUG。
一、对于普通栏目的权限:
PHPCMS v9在判断权限的时候只判断admin_role_priv表中所记录的权限。也就是我们在设置角色的时候所进行的“权限设置”,而不考虑我们所设置的“栏目权限”。由admin:check_priv()在可以看出,该方法没有对栏目权限作任何考虑。所以当我们使用非超管登录时,修改栏目或删除栏目就会提示“您没有权限操作该项”。
(地址:phpcms/modules/admin/classes/admin.class.php)
解决办法:
1.找到/phpcms/modules/admin/classes/admin.class.php ,在里面找到
上面的方法可能只能解决栏目权限问题,并不能解决单页权限问题,这是因为后台并没有保存到我们的设置的单页权限。
解决办法:
我们找到后台的:【设置】-【管理员设置】-【角色管理】-【栏目权限】,选择我们要修改的站点,然后右边出现如下:
这是因为在后台的代码中(phpcms/modules/admin/role.php 175行)设置栏目权限setting_cat_priv()这个方法里面定义了如果是类型为 1 即单页,禁用除了查看之外所有权限,其他权限呈现灰色不可选。事实上栏目和单页在系统看来都是作为栏目来处理的。
所以我们把if这个判断去除,把foreach循环里面的内容修改为以下即可:
4.但是我们用普通帐号去管理栏目的时候,修改单页保存之后,再点击编辑的时候提示没有权限了。
修改栏目方法地址:phpcms/modules/admin/category.php 找到edit()方法,发现默认方法中会根据栏目类型调用不同管理模版,单页模版的是:phpcms/modules/admin/templates/category_page_edit.tpl.php ,打开文件
ctrl+F 查找id="div_setting_5" (定位到第五个TAB标签),看表头中写的是[role_name]和[edit](正确应该是[view]的)两项。
原因:到这里我们应该清楚为什么修改一次就没权限了,因为每次修改之前会把默认值放到页面,然后提交的时候只提交了查看权限,其他的权限没有表单来提交过去,而更新权限是把所有先清空一遍,然后保存表单提交的数据,所以其他权限都没了。
我们把栏目模版:phpcms/modules/admin/templates/category_edit.tpl.php (ctrl+F id="div_setting_5")对应的表格内容复制替换这里即可。复制完之后把move改成remove 就是之后一项[移动]的权限的值。
保存之后,我们再点开发现后台现在已经可以选择权限了,选中保存并测试。完成!
说明:
1.在上面修改的操作中,请习惯写上注释,这是我们自己修改的,等到官方升级之后看看是否需要修改覆盖。
2.操作做完之后,默认新增的栏目只能是当前管理员才有效,这个时候我们可以在新增栏目的时候选择,在 权限设置 一栏选择哪些管理员有权限。
3.对于新增栏目权限,大家可以自己按上面的方法去检查并修复。
普通管理员没有权限修改栏目,只有超级管理员才有权限修改,凡是非超级管理员,设置栏目权限后只能添加栏目,不能对栏目进行修改和删除操作,提示您没有权限操作该项这使系统的一个BUG。
一、对于普通栏目的权限:
PHPCMS v9在判断权限的时候只判断admin_role_priv表中所记录的权限。也就是我们在设置角色的时候所进行的“权限设置”,而不考虑我们所设置的“栏目权限”。由admin:check_priv()在可以看出,该方法没有对栏目权限作任何考虑。所以当我们使用非超管登录时,修改栏目或删除栏目就会提示“您没有权限操作该项”。
(地址:phpcms/modules/admin/classes/admin.class.php)
解决办法:
1.找到/phpcms/modules/admin/classes/admin.class.php ,在里面找到
$r =$privdb->get_one(array('m'=>ROUTE_M,'c'=>ROUTE_C,'a'=>$action,'roleid'=>$_SESSION['roleid'],'siteid'=>$siteid));
大概在171行上,然后在该句下面加上:
//修改2025-08-06
if(ROUTE_C == 'category'){
$catid = $_GET['catid'] ? $_GET['catid'] : $_POST['catid'];
//获取角色当前权限设置
pc_base::load_app_class('role_cat', '', 0);
$priv = role_cat::get_roleid($_SESSION['roleid'], $siteid);
if($priv[$catid][$action]) $r = true;
}
//修改完毕
2.在 /phpcms/modules/admin/category.php中找到
foreach ($arrchildid_arr as $arr_v) {
$this->update_priv($arr_v, $_POST['priv_groupid'], 0);
}
改为:
foreach ($arrchildid_arr as $arr_v) {
$this->update_priv($arr_v, $_POST['priv_roleid']);
$this->update_priv($arr_v, $_POST['priv_groupid'], 0);
}
二、对于单页的权限:上面的方法可能只能解决栏目权限问题,并不能解决单页权限问题,这是因为后台并没有保存到我们的设置的单页权限。
解决办法:
我们找到后台的:【设置】-【管理员设置】-【角色管理】-【栏目权限】,选择我们要修改的站点,然后右边出现如下:
这是因为在后台的代码中(phpcms/modules/admin/role.php 175行)设置栏目权限setting_cat_priv()这个方法里面定义了如果是类型为 1 即单页,禁用除了查看之外所有权限,其他权限呈现灰色不可选。事实上栏目和单页在系统看来都是作为栏目来处理的。
所以我们把if这个判断去除,把foreach循环里面的内容修改为以下即可:
$v['disabled'] = '';
$v['add_check'] = isset($priv[$v['catid']]['add']) ? 'checked' : '';
$v['delete_check'] = isset($priv[$v['catid']]['delete']) ? 'checked' : '';
$v['listorder_check'] = isset($priv[$v['catid']]['listorder']) ? 'checked' : '';
$v['push_check'] = isset($priv[$v['catid']]['push']) ? 'checked' : '';
$v['move_check'] = isset($priv[$v['catid']]['remove']) ? 'checked' : '';
$v['edit_check'] = isset($priv[$v['catid']]['edit']) ? 'checked' : '';
$v['init_check'] = isset($priv[$v['catid']]['init']) ? 'checked' : '';
$category[$k] = $v;
这个时候你去后台即可看到所有的单页和栏目都可以选择所有权限了。4.但是我们用普通帐号去管理栏目的时候,修改单页保存之后,再点击编辑的时候提示没有权限了。
修改栏目方法地址:phpcms/modules/admin/category.php 找到edit()方法,发现默认方法中会根据栏目类型调用不同管理模版,单页模版的是:phpcms/modules/admin/templates/category_page_edit.tpl.php ,打开文件
ctrl+F 查找id="div_setting_5" (定位到第五个TAB标签),看表头中写的是[role_name]和[edit](正确应该是[view]的)两项。
原因:到这里我们应该清楚为什么修改一次就没权限了,因为每次修改之前会把默认值放到页面,然后提交的时候只提交了查看权限,其他的权限没有表单来提交过去,而更新权限是把所有先清空一遍,然后保存表单提交的数据,所以其他权限都没了。
我们把栏目模版:phpcms/modules/admin/templates/category_edit.tpl.php (ctrl+F id="div_setting_5")对应的表格内容复制替换这里即可。复制完之后把move改成remove 就是之后一项[移动]的权限的值。
保存之后,我们再点开发现后台现在已经可以选择权限了,选中保存并测试。完成!
说明:
1.在上面修改的操作中,请习惯写上注释,这是我们自己修改的,等到官方升级之后看看是否需要修改覆盖。
2.操作做完之后,默认新增的栏目只能是当前管理员才有效,这个时候我们可以在新增栏目的时候选择,在 权限设置 一栏选择哪些管理员有权限。
3.对于新增栏目权限,大家可以自己按上面的方法去检查并修复。
本文标签:
很赞哦! ()
上一篇:phpcms分页用法简介代码示例
图文教程
phpcms和dedecms有哪些区别不同
phpcms和dedecms是国内开源的cms网站管理系统中出色的两个,在性能和稳定安全方面,各有千秋。phpcms和dedecms的区别
PHPCMS怎么取消水印?
PHPCMS如何取消水印?首先将“statics/images/water”文件夹删除;然后找到“image.class.php”文件,并找到类中的“watermark”方法;
phpcms怎么更换网站模板
phpcms网站更换模板:打开网站根目录,在根目录中找到"phpcms"文件夹,点击文件夹进入。在"phpcms"文件夹下找到"templates"文件夹,双击进入。
phpcms进入后台报错的解决方法
phpcms进入后台报错的解决办法:首先找到并打开“/caches/configs/system.php”文件;然后将“'session_storage' => 'mysql'”中的mysql改成files即可。
相关源码
-
(响应式)WordPress主题Ripro9.0博客免扩展二开版RiPro9.0是基于RiPro8.9版本深度二开优化的资源付费主题,源码修正,修复原版多处功能异常,确保系统稳定运行。支持虚拟主机环境部署,无需特殊服务器配置。查看源码 -
响应式pbootcms模板新闻资讯博客自媒体门户网站行业通用解决方案为新闻资讯、自媒体博客打造的响应式网站模板,同时支持企业门户、行业资讯等多场景快速适配。通过简单的图文替换即可实现跨行业转型,显著降低建站成本。查看源码 -
(自适应)html5中英双语通用机械设备pbootcms模板下载本模板基于PbootCMS内核精心开发,为机械设备制造企业量身打造。设计风格大气稳重,充分展现机械行业的专业特质与技术实力。采用HTML5技术构建,支持中英文双语切换,满足国际化业务需求。整站布局合理,充分展示企业产品、案例与服务,帮助访客快速了解企业核心优势。查看源码 -
帝国cms7.2淘宝客导购自媒体博客网站模板源码本模板基于帝国CMS7.2内核深度开发,为淘宝客、商品导购类自媒体及博客网站设计。通过可视化后台管理,可快速搭建具备商品推荐、比价功能的内容平台,帮助用户实现流量高效转化。查看源码 -
自适应新闻资讯技术博客个人网站pbootcms模板该模板基于PbootCMS开源内核深度开发,该模板适用于游戏新闻网站、游戏博客等企业或个人网站,新闻资讯技术博客pbootcms模板;采用六级分辨率断点适配技术查看源码 -
(自适应)光伏测试仪器电站运维设备网站源码免费下载本模板为光伏检测设备与电站运维服务企业设计,采用PbootCMS内核开发,具备完整的设备展示、技术文档管理及客户服务功能模块。通过自适应结构与SEO优化框架,有效提升企业在移动端和搜索引擎中的专业形象。查看源码
| 分享笔记 (共有 篇笔记) |
