问题:

普通管理员没有权限修改栏目,只有超级管理员才有权限修改,凡是非超级管理员,设置栏目权限后只能添加栏目,不能对栏目进行修改和删除操作,提示您没有权限操作该项这使系统的一个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. Detours简介 (拦截x86机器上的任意的win32 API函数)

    Detours 当然是用detours,微软明显高腾讯一筹,同上,至今没失败过.写这种HOOK一定要再写个测试程序,不要直接HOOK你的目的程序,例如QQ,因为这样不方面更灵活的测试.说明一下:Det ...

  2. 【HDOJ】 七百题留念

  3. Reverse Linked List II——LeetCode

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...

  4. Windows 10 代理上网用户的正确使用姿势

      1.找不到IE,如何使用IE来配置局域网代理 打开Edge浏览器,点击选项,找到“使用Internet Explorer打开” 接下来可以使用熟练的姿势设置IE局域网代理上网了 2.Windows ...

  5. [LeetCode] Word Break II 解题思路

    Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each ...

  6. Jenkins配置Java项目1(Java+Maven+Tomcat)

    先收集几个网址,后续再自己动手过一遍 http://www.cnblogs.com/sunzhenchao/archive/2013/01/30/2883289.html https://my.osc ...

  7. DHTML【1】

       什么是DHTML呢?英文全称(Dynamic Hypertext Markup Language),即动态超文本标记语言,DHTML不是一个独立的新技术,而是多种技术的综合,它能使HTML变的更 ...

  8. jQuery UI Widget(1.8.1)工作原理--转载

    先看下代码的相关注释: /*! * jQuery UI Widget 1.8.1 * * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/abo ...

  9. Class loading in JBoss AS 7--官方文档

    Class loading in AS7 is considerably different to previous versions of JBoss AS. Class loading is ba ...

  10. Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项

    本文首先总结一下Bitmap的相关概念,然后通过一个实际的问题来分析设置BitmapFactory.options的注意事项,以减少不必要的内存占用率,避免发生OOM. 一. Bitmap的使用tri ...