国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > CMS > PhpCMS > 正文

PHPCMS v9修改欄目或者單頁沒有權限

2024-09-10 07:15:14
字體:
來源:轉載
供稿:網友

問題:普通管理員沒有權限修改欄目,只有超級管理員才有權限修改,凡是非超級管理員,設置欄目權限后只能添加欄目,不能對欄目進行修改和刪除操作,提示您沒有權限操作該項這使系統的一個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行上,然后在該句下面加上:

  1. //修改2012-08-06 
  2. if(ROUTE_C == 'category'){ 
  3. $catid = $_GET['catid'] ? $_GET['catid'] : $_POST['catid']; 
  4. //獲取角色當前權限設置 
  5. pc_base::load_app_class('role_cat''', 0); 
  6. $priv = role_cat::get_roleid($_SESSION['roleid'], $siteid); 
  7. if($priv[$catid][$action]) $r = true; 
  8. //修改完畢 

2.在 /phpcms/modules/admin/category.php中找到如下代碼:

  1. foreach ($arrchildid_arr as $arr_v) { 
  2.        $this->update_priv($arr_v$_POST['priv_groupid'], 0); 
  3.  
  4. //改為: 
  5.  
  6. foreach ($arrchildid_arr as $arr_v) { 
  7.        $this->update_priv($arr_v$_POST['priv_roleid']); 
  8.        $this->update_priv($arr_v$_POST['priv_groupid'], 0); 
  9. }  //Vevb.com 

二、對于單頁的權限:

上面的方法可能只能解決欄目權限問題,并不能解決單頁權限問題,這是因為后臺并沒有保存到我們的設置的單頁權限.

解決辦法:我們找到后臺的:【設置】-【管理員設置】-【角色管理】-【欄目權限】,選擇我們要修改的站點,然后右邊出現如下:

這是因為在后臺的代碼中(phpcms/modules/admin/role.php 175行)設置欄目權限setting_cat_priv()這個方法里面定義了如果是類型為 1 即單頁,禁用除了查看之外所有權限,其他權限呈現灰色不可選,事實上欄目和單頁在系統看來都是作為欄目來處理的.

所以我們把if這個判斷去除,把foreach循環里面的內容修改為以下即可:

  1. $v['disabled'] = ''
  2. $v['add_check'] = isset($priv[$v['catid']]['add']) ? 'checked' : ''
  3. $v['delete_check'] = isset($priv[$v['catid']]['delete']) ? 'checked' : ''
  4. $v['listorder_check'] = isset($priv[$v['catid']]['listorder']) ? 'checked' : ''
  5. $v['push_check'] = isset($priv[$v['catid']]['push']) ? 'checked' : ''
  6. $v['move_check'] = isset($priv[$v['catid']]['remove']) ? 'checked' : ''
  7. $v['edit_check'] = isset($priv[$v['catid']]['edit']) ? 'checked' : ''
  8. $v['init_check'] = isset($priv[$v['catid']]['init']) ? 'checked' : ''
  9. $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.對于新增欄目權限,大家可以自己按上面的方法去檢查并修復.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 成武县| 日土县| 五大连池市| 靖边县| 宁远县| 文安县| 郁南县| 文成县| 黔南| 余庆县| 沂源县| 泽普县| 夏津县| 平和县| 莆田市| 桦南县| 邳州市| 阿城市| 威宁| 和平县| 新泰市| 呼伦贝尔市| 九龙坡区| 广州市| 和政县| 苏尼特左旗| 乌兰察布市| 巴青县| 石家庄市| 忻城县| 格尔木市| 武夷山市| 江孜县| 邵阳县| 施甸县| 田阳县| 乌拉特中旗| 湖南省| 谢通门县| 灌云县| 舒兰市|