数据库的表设计:
节点 或叫 权限名(节点编号, 节点名)
(1, '客户管理')
权限 或叫 权限值(权限编号, 权限值, 节点编号, 说明)
(1, '/admin/customer_list.php', 1, '访问客户管理节点')
(2, 'p_admin_customer_list_self', 1, '查看自己的客户信息')
(3, 'p_admin_customer_list_shop', 1, '查看店面的客户信息')
(4, 'p_admin_customer_list_brand', 1, '查看品牌的客户信息')
(5, 'p_admin_customer_list_all', 1, '查看所有的客户信息')
角色(角色编号, 角色值)
(1, '销售员')
(2, '店长')
(3, '品牌经理')
角色和权限关系表(角色编号, 权限编号)
(1, 1) 销售 能够 访问客户管理节点
(1, 2) 销售 能够 查看自己的客户信息
(2, 1) 店长 能够 访问客户管理节点
(2, 3) 店长 能够 查看店面的客户信息
(3, 1) 经理 能够 访问客户管理节点
(3, 4) 经理 能够 查看品牌的客户信息
客户表(客户编号, 客户所属销售员的编号)
销售员表(销售员编号, 销售员所属店面编号)
店长表(店长编号, 店长所属店面编号)
店面表(店面编号, 店面所属品牌编号)
品牌经理表(经理编号, 经理所属品牌编号)
权限判断和显示逻辑:
//$app['user']['rbac']['perm']保存的是当前用户具有的所有权限
//客户管理节点的链接
$app['customer_list_link'] = array();
if(in_array('p_admin_customer_list_self', $app['user']['rbac']['perm'], true))
$app['customer_list_link'][] = '/admin/customer_list.php?section=self';
if(in_array('p_admin_customer_list_shop', $app['user']['rbac']['perm'], true))
$app['customer_list_link'][] = '/admin/customer_list.php?section=shop';
if(in_array('p_admin_customer_list_brand', $app['user']['rbac']['perm'], true))
$app['customer_list_link'][] = '/admin/customer_list.php?section=brand';
//客户管理节点的数据列表
$app['customer_list'] = array();
$app['customer_list'] = app_customer_list();
echo app_render('customer_list.php', 'admin');
function app_customer_list() {
global $app;
if(!isset($_GET['section'])) return false;
switch($_GET['section']) {
case 'self':
if(!in_array('p_admin_customer_list_self', $app['user']['rbac']['perm'], true)) return false;
//根据销售员编号查询客户信息
$sql = 'select * from customer where 销售员编号 = 1024 order by id desc limit 10 offset 0';
break;
case 'shop':
if(!in_array('p_admin_customer_list_shop', $app['user']['rbac']['perm'], true)) return false;
//查出店长管理的店面下的所有销售员的编号
$sql = 'select * from customer where 销售员编号 in (销售员编号集合) order by id desc limit 10 offset 0';
break;
case 'brand':
if(!in_array('p_admin_customer_list_brand', $app['user']['rbac']['perm'], true)) return false;
//查出经理管理的品牌的所有店面下的所有销售员的编号
$sql = 'select * from customer where 销售员编号 in (销售员编号集合) order by id desc limit 10 offset 0';
break;
default:
return false;
}
$db = app_db();
return $db->query($sql)->fetchAll(PDO::FETCH_ASSOC);
}