问题:

普通管理员没有权限修改栏目,只有超级管理员才有权限修改,凡是非超级管理员,设置栏目权限后只能添加栏目,不能对栏目进行修改和删除操作,提示您没有权限操作该项这使系统的一个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行上,然后在该句下面加上
//修改2012-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 v9修改栏目或者单页没有权限的更多相关文章

  1. phpcms v9修改栏目描述的多行文本为编辑器方法

    phpcms v9在添加栏目的时候,栏目描述为多行文本,无法满足有图片,以及格式的修改调整,那么仿站网今天告诉大家如何将他改为编辑器,方法如下 找到phpcms/moudles/admin/templ ...

  2. phpcms v9 首页怎么调取单页内容,描述,标题等

    {pc:,  v9 数据表前缀  catid 这是单页的id

  3. 解决织梦替换ueditor编辑器后栏目与单页无法保存内容

    织梦的默认编辑器是ckeditor,没有插入代码的功能,不够强大,就换成了百度的UEditor编辑器. 使用织梦DedeCMS百度整合UEditor编辑器时,碰到了栏目内容或者单页无法保存的问题,这个 ...

  4. PHPCMS v9 实现首页,列表页,内容页调用点击量方法

    大家好,今天有点闲,看很多朋友经常问PHPCMS v9 首页,列表页,内容页调用点击怎么弄,打算抽时间把代码全部归纳出来,以便大家日后使用,如下: 1,首页调用点击量 {pc:content acti ...

  5. phpcms v9二级栏目生成到根目录后三级栏目无法访问的解决办法

    这个栏目问题折腾了我一天多,可怜我这个美工又不会程序!!! 我的问题是: 我的栏目设置如下: 一级栏目[生成到根目录(是)]> 二级栏目[生成到根目录(是)] > 三级栏目[生成到根目录( ...

  6. phpcms V9 修改生成静态文件路径/html

    在论坛看到部分用户反馈这个问题,要修改的其实是html_root的值,默认是"/html"如果要生成在网站根目录的话,这个值则要为空.论坛上现在看到的办法是打开caches\con ...

  7. Phpcms V9当前栏目及所有二级栏目下内容调用标签

    在二级栏目列表页调用: <!--* 获取子栏目* @param $parentid 父级id* @param $type 栏目类型* @param $self 是否包含本身 0为不包含* @pa ...

  8. phpcms v9指定栏目调用系列教程

    调用指定栏目名称: {$CATEGORYS[栏目ID]['catname']} 调用指定栏目url {$CATEGORYS[栏目ID]['url']} 调用指定栏目栏目图片 {$CATEGORYS[栏 ...

  9. PHPCMS V9静态化HTML生成设置及URL规则优化

    先讲讲Phpcms V9在后台怎么设置生成静态化HTML,之后再讲解怎么自定义URL规则,进行URL地址优化.在这一篇中,伪静态就不涉及了,大家可以移步到Phpcms V9全站伪静态设置方法. 一.静 ...

随机推荐

  1. -_-#QUOTA_EXCEEDED_ERR: DOM Exception 22

    iOS的Safari在无痕模式下,sessionStorage操作产生异常,报错QUOTA_EXCEEDED_ERR: DOM Exception 22. html5 localStorage err ...

  2. ubuntu14.04下嵌入式工作环境搭建

    昨天作死一不小心把小红帽home目录下的东西删光了.跟着国嵌的视频学了这么久,对linux也算是有些熟悉,就决定自己在ubuntu下搭建一个工作环境.整个过程还算比较顺利,不过也有些小波折.下面把这次 ...

  3. The ToolStripMenuItem visible value always false

    http://social.msdn.microsoft.com/Forums/vstudio/en-US/8cf60e57-6d97-43c6-bb3a-394b9bf130af/the-tools ...

  4. linux上使用netstat查看当前服务和监听端口

    netstat这个命令常用在网络监控方面.利用这个命令,可以查看当前系统监听的服务和已经建立的服务,以及相应的端口.协议等信息. netstat参数说明 netstat参数虽然很多,但是常用的不多,主 ...

  5. SQL中Merge的用法

    SQL中Merge的用法 Merge的用法 Merge可以完成以下功能: 1.  两个表之间数据的更新 2.  进行进销存更新库存 3.  进行表之间数据的复制 语法说明: 1.  在语句结束后一定要 ...

  6. Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  7. validator 对象

    validate方法返回Validator对象,Validator对象有很多种有用的方法: Validator.form()验证表单是否有效,返回true/false Validator.elemen ...

  8. python常用的一些东西——sys、os等

    1.常用内置函数:(不用import就可以直接使用)      help(obj) 在线帮助, obj可是任何类型     callable(obj) 查看一个obj是不是可以像函数一样调用     ...

  9. duilib DirectUI库里面的一个简单的例子RichListDemo

    1.首先来看这里的CRichListWnd 已经不再是从CWindowWnd继承了 classCRichListWnd:publicWindowImplBase 从WindowImplBase中,可以 ...

  10. Zend框架2入门(二) (转)

    Zend框架2使用一个模块系统,和你组织内每个你的主应用程序特定代码模块.骨架提供的应用程序模块是用于提供引导,错误和路由配置到整个应用程序.它通常是用来提供应用水平控制器,比如说,应用程序的主页,但 ...