主要php文件:
1,admin/includes/inc_menu.php ECSHOP管理中心菜單數組--配置菜單組及URL
2,languages/zh_cn/admin/common.php ECSHOP管理中心共用語言文件--配置菜單顯示名
3,admin/includes/inc_priv.php ECSHOP權限對照表--將菜單action與權限綁定
4,languages/zh_cn/admin/priv_action.php ECSHOP權限名稱語言文件---配置權限顯示的中文名
主要數據表:ecs_admin_action
這里用后台商品管理來說明這幾個配置文件:
權限:
1.ecs_admin_action 管理員權限表。權限以分組的形式存儲,首先要添加一個權限管理的一級分組節點(此權限分組節點僅作為分組歸類,沒有實際權限控制作用),再添加所屬的權限名。
配置摘要:

+-----------+-----------+------------------+------------+ | action_id | parent_id | action_code | relevance | +-----------+-----------+------------------+------------+ | 1 | 0 | goods | | | 21 | 1 | goods_manage | | | 22 | 1 | remove_back | | | 23 | 1 | cat_manage | | | 24 | 1 | cat_drop | cat_manage | | 25 | 1 | attr_manage | | | 26 | 1 | brand_manage | | | 27 | 1 | comment_priv | | | 84 | 1 | tag_manage | | | 70 | 1 | goods_type | | | 94 | 1 | goods_auto | | | 103 | 1 | virualcard | | | 105 | 1 | picture_batch | | | 106 | 1 | goods_export | | | 107 | 1 | goods_batch | | | 108 | 1 | gen_goods_script | | +-----------+-----------+------------------+------------+ #第一條goods就是下面權限的父權限
2.priv_action.php 權限名稱語言文件。設置權限的中文名稱,一般用於在修改角色權限時顯示中文權限名稱。
配置摘要:

/* 權限管理的一級分組 */ $_LANG['goods'] = '商品管理'; //商品管理部分的權限 $_LANG['goods_manage'] = '商品添加/編輯'; $_LANG['remove_back'] = '商品刪除/恢復'; $_LANG['cat_manage'] = '分類添加/編輯'; $_LANG['cat_drop'] = '分類轉移/刪除'; $_LANG['attr_manage'] = '商品屬性管理'; $_LANG['brand_manage'] = '商品品牌管理'; $_LANG['comment_priv'] = '用戶評論管理'; $_LANG['goods_type'] = '商品類型'; $_LANG['tag_manage'] = '標簽管理'; $_LANG['goods_auto'] = '商品自動上下架'; $_LANG['topic_manage'] = '專題管理'; $_LANG['virualcard'] = '虛擬卡管理'; $_LANG['picture_batch'] = '圖片批量處理'; $_LANG['goods_export'] = '商品批量導出'; $_LANG['goods_batch'] = '商品批量上傳/修改'; $_LANG['gen_goods_script'] = '生成商品代碼'; $_LANG['suppliers_goods'] = '供貨商商品管理';
菜單:
3.inc_menu.php 管理中心菜單數組。顯示在后台左側的菜單項。以多維數組形式來表示菜單的分級,第一維即是頂級菜單。
配置摘要:

$modules['02_cat_and_goods']['01_goods_list'] = 'goods.php?act=list'; // 商品列表 $modules['02_cat_and_goods']['02_goods_add'] = 'goods.php?act=add'; // 添加商品 $modules['02_cat_and_goods']['03_category_list'] = 'category.php?act=list'; $modules['02_cat_and_goods']['05_comment_manage'] = 'comment_manage.php?act=list'; $modules['02_cat_and_goods']['06_goods_brand_list'] = 'brand.php?act=list'; $modules['02_cat_and_goods']['08_goods_type'] = 'goods_type.php?act=manage'; $modules['02_cat_and_goods']['11_goods_trash'] = 'goods.php?act=trash'; // 商品回收站 $modules['02_cat_and_goods']['12_batch_pic'] = 'picture_batch.php'; $modules['02_cat_and_goods']['13_batch_add'] = 'goods_batch.php?act=add'; // 商品批量上傳 $modules['02_cat_and_goods']['14_goods_export'] = 'goods_export.php?act=goods_export'; $modules['02_cat_and_goods']['15_batch_edit'] = 'goods_batch.php?act=select'; // 商品批量修改 $modules['02_cat_and_goods']['16_goods_script'] = 'gen_goods_script.php?act=setup'; $modules['02_cat_and_goods']['17_tag_manage'] = 'tag_manage.php?act=list'; $modules['02_cat_and_goods']['50_virtual_card_list'] = 'goods.php?act=list&extension_code=virtual_card'; $modules['02_cat_and_goods']['51_virtual_card_add'] = 'goods.php?act=add&extension_code=virtual_card'; $modules['02_cat_and_goods']['52_virtual_card_change'] = 'virtual_card.php?act=change'; $modules['02_cat_and_goods']['goods_auto'] = 'goods_auto.php?act=list';
4.common.php 管理中心共用語言文件。設置inc_menu中設置的菜單的中文名稱,每一維都要設置名稱。
配置摘要:

/* 菜單分類部分 */ $_LANG['02_cat_and_goods'] = '商品管理'; /* 商品管理 */ $_LANG['01_goods_list'] = '商品列表'; $_LANG['02_goods_add'] = '添加新商品'; $_LANG['03_category_list'] = '商品分類'; $_LANG['04_category_add'] = '添加分類'; $_LANG['05_comment_manage'] = '用戶評論'; $_LANG['06_goods_brand_list'] = '商品品牌'; $_LANG['07_brand_add'] = '添加品牌'; $_LANG['08_goods_type'] = '商品類型'; $_LANG['09_attribute_list'] = '商品屬性'; $_LANG['10_attribute_add'] = '添加屬性'; $_LANG['11_goods_trash'] = '商品回收站'; $_LANG['12_batch_pic'] = '圖片批量處理'; $_LANG['13_batch_add'] = '商品批量上傳'; $_LANG['15_batch_edit'] = '商品批量修改'; $_LANG['16_goods_script'] = '生成商品代碼'; $_LANG['17_tag_manage'] = '標簽管理'; $_LANG['18_product_list'] = '貨品列表'; $_LANG['52_attribute_add'] = '編輯屬性'; $_LANG['53_suppliers_goods'] = '供貨商商品管理'; $_LANG['14_goods_export'] = '商品批量導出'; $_LANG['50_virtual_card_list'] = '虛擬商品列表'; $_LANG['51_virtual_card_add'] = '添加虛擬商品'; $_LANG['52_virtual_card_change'] = '更改加密串'; $_LANG['goods_auto'] = '商品自動上下架';
將菜單鏈接的Action與權限關聯:
5.inc_priv.php 權限對照表。一個菜單指向的Action頁可能只使用一個權限,也可能使用多個權限,Action對應多個權限時,使用數組來表示。
如代號02_goods_add的商品添加Action只調用了goods_manage權限,因此配置為:$purview['02_goods_add'] = 'goods_manage'; 而代號01_goods_list的商品列表頁包含的操作多,因此調用多個權限:$purview['01_goods_list']= array('goods_manage', 'remove_back');
配置摘要:

//商品管理權限 $purview['01_goods_list'] = array('goods_manage', 'remove_back'); $purview['02_goods_add'] = 'goods_manage'; $purview['03_category_list'] = array('cat_manage', 'cat_drop'); //分類添加、分類轉移和刪除 $purview['05_comment_manage'] = 'comment_priv'; $purview['06_goods_brand_list'] = 'brand_manage'; $purview['08_goods_type'] = 'attr_manage'; //商品屬性 $purview['11_goods_trash'] = array('goods_manage', 'remove_back'); $purview['12_batch_pic'] = 'picture_batch'; $purview['13_batch_add'] = 'goods_batch'; $purview['14_goods_export'] = 'goods_export'; $purview['15_batch_edit'] = 'goods_batch'; $purview['16_goods_script'] = 'gen_goods_script'; $purview['17_tag_manage'] = 'tag_manage'; $purview['50_virtual_card_list'] = 'virualcard'; $purview['51_virtual_card_add'] = 'virualcard'; $purview['52_virtual_card_change'] = 'virualcard'; $purview['goods_auto'] = 'goods_auto';
在Action中判斷管理員是否有改訪問操作權限:
ec內置兩個函數:
- admin_priv(權限名); 權限不通過時跳轉的方式提示;
- check_authz_json(權限名);權限不通過時返回json提示數據,一般與make_json_result 或 make_json_error 配合返回數據/錯誤信息使用。
6.admin/goods.php
代碼摘要:

/*------------------------------------------------------ */ //-- 商品列表,商品回收站 /*------------------------------------------------------ */ if ($_REQUEST['act'] == 'list' || $_REQUEST['act'] == 'trash') { admin_priv('goods_manage'); ........................................ /*------------------------------------------------------ */ //-- 修改商品貨號 /*------------------------------------------------------ */ elseif ($_REQUEST['act'] == 'edit_goods_sn') { check_authz_json('goods_manage'); $goods_id = intval($_POST['id']); $goods_sn = json_str_iconv(trim($_POST['val'])); /* 檢查是否重復 */ if (!$exc->is_only('goods_sn', $goods_sn, $goods_id)) { make_json_error($_LANG['goods_sn_exists']); } $sql="SELECT goods_id FROM ". $ecs->table('products')."WHERE product_sn='$goods_sn'"; if($db->getOne($sql)) { make_json_error($_LANG['goods_sn_exists']); } if ($exc->edit("goods_sn = '$goods_sn', last_update=" .gmtime(), $goods_id)) { clear_cache_files(); make_json_result(stripslashes($goods_sn)); } } ......................
經驗分割線
【注意】
1,菜單組的權限控制不一定要與權限綁定,可以直接使用admin_priv(action_code)控制菜單指向的action的訪問權限。
2,action_code就是權限名。
添加一個新后台菜單權限的流程:
1.在ecs_admin_action表中添加action信息;
action_id | parent_id | action_code |
222 | 0 | test_action |
223 | 222 | test_child |
2.inc_menu.php中添加菜單action和url
#[菜單組名][自定義菜單的action名]=action的url
$modules['17_action_test']['a_test_action'] = 'test_action.php?act=list'; $modules['17_action_test']['a_test_child'] = 'test_action.php?act=test_child';
3.在common.php中添加菜單中文名
#對應上述菜單的配置名
$_LANG['17_action_test'] = '測試菜單'; #頂級菜單(菜單組名) $_LANG['a_test_action'] = '測試父權限 '; #子菜單 $_LANG['a_test_child'] = '測試子權限 ';
*此時刷新可以看到管理列表多出了測試菜單組。
4.在inc_priv.php新增對應 該action的權限對照名
#權限對照名=權限名(action_code),權限對照名要對應菜單action名
$purview['a_test_action'] = 'test_action'; $purview['a_test_child'] = 'test_child';
5.在priv_action.php為action權限配置一個中文名。
#權限名(action_code)=權限中文名
$_LANG['test_action'] = '測試父權限 '; $_LANG['test_child'] = '測試子權限 ';
*此時在角色管理可以看到多出了這兩個權限中文名。
6.編輯新增admin/test_action.php,代碼如下:
1 <?php 2 3 /** 4 * ECSHOP 權限管理測試頁 5 * $Author: GaZeon 6 */ 7 define('IN_ECS', true); 8 9 require(dirname(__FILE__) . '/includes/init.php'); 10 11 12 if ($_REQUEST['act'] == 'list') 13 { 14 /* 檢查權限 */ 15 admin_priv('test_action'); 16 17 echo '訪問權限通過,歡迎來到父權限測試'; 18 } 19 else if ($_REQUEST['act'] == 'test_child') 20 { 21 /* 檢查權限 */ 22 admin_priv('test_child'); 23 24 echo '訪問權限通過,歡迎來到子權限測試'; 25 }
可以自行使用不同的角色測試。
3,languages/zh_cn/admin/common.php ECSHOP管理中心公用語言配置