您现在的位置是:首页 > 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怎么添加友情链接
phpcms添加超链接的方法:首 先进入phpcms后台,点击顶部菜单的“模块”;然后点击“模块管理”下的“友情链接”选项;最后点击“添加友情链接”,开始添加友情链接即可。
Phpcmsv9怎么开发留言板
一、创建模块存放目录 在/phpcms/modules/下创建一个文件夹gbook用来存放模块,gbook文件下包含三个文件夹,classes(模块类库包)、functions(模块函数类包)
phpcms系统是免费的吗?需要授权吗?
phpcms系统是免费的吗?PHPCMS有免费版与商业版免费版仅限于个人非商业用途商业版需要购买授权
phpcms前端页面上传文件的实现方法
今天多亏网友指点,才弄懂了怎么在前台上传文件,记录下来跟大家分享一下PHPCMS其实有一个叫做附件的模块,上传用的就是这个东西,现在我们来看一下对应的文件:
相关源码
-
(自适应)中英文双语外贸扬声器音响喇叭话筒网站模板免费下载为音响设备外贸企业设计的中英文双语网站模板,基于PbootCMS内核开发。适配扬声器系统、音频设备等产品的国际化展示需求查看源码 -
(自适应)橙色家政服务清洁保洁服务pbootcms网站模板源码下载模板核心价值:基于PbootCMS内核开发的家政服务类网站模板,通过模块化设计展现服务项目、团队风采、服务案例等核心板块,突出时效预约、服务标准化展示等家政行业特性。查看源码 -
(自适应)蓝色英文外贸电子科技产品带三级栏目网站模板为外贸企业设计的英文网站模板,基于PbootCMS系统开发。突出多语言支持和国际化布局,三级栏目结构清晰展示产品分类,响应式设计确保更好客户在移动端和PC端获得一致的专业体验。查看源码 -
(自适应响应式)高端简繁双语HTML5金融资本咨询单页pbootcms模板采用响应式设计确保在各类手机端设备很好的呈现。该模板专注于金融咨询、资本管理等领域企业形象展示,通过结构化布局突出行业专业度与可信度,后台数据同步管理简化内容维护流程。查看源码 -
(PC+WAP)蓝色公司注册财务会计公证律师网站源码下载本模板基于PbootCMS内核开发,为财务会计事务所、律师公证机构等专业服务机构打造。采用自适应设计,确保在各类设备上都能呈现专业视觉效果,帮助机构建立值得信赖的线上形象。查看源码 -
pbootcms(自适应)SEO优化排名服务公司网站模板核心定位为SEO排名服务商打造的营销型网站框架,集成PbootCMS开源系统的高效管理能力与SEO最佳实践方案,助力企业快速建立专业的技术服务形象。查看源码
| 分享笔记 (共有 篇笔记) |
