1、用户表(主要用来存储后台管理员用户的基本信息,并关联于角色表,可以做成单用户多角色)
字段名称 | 类型 | 长度 | 注释 |
id | int | 11 | 主键 |
account | varchar | 32 | 后台管理员账号 |
pwd | char | 32 | 后台管理员密码 |
real_name | varchar | 16 | 后台管理员姓名 |
roles | varchar | 128 | 后台管理员权限(role表的id)多角色可以用逗号隔开例如:1,2,3 |
last_ip | varchar | 16 | 后台管理员最后一次登录ip |
last_time | datetime | 0 | 后台管理员最后一次登录时间 |
add_time | datetime | 0 | 后台管理员添加时间 |
login_count | int | 10 | 登录次数 |
status | tinyint | 1 | 后台管理员状态 1有效0无效 |
is_del | tinyint | 1 | 是否删除1删除0显示 |
2、侧边导航栏表(存储方式可以通过控制接口或者控制显示方式来显示菜单权限)
字段名称 | 类型 | 长度 | 注释 |
id | smallint | 5 | 菜单ID |
pid | smallint | 5 | 父级id |
icon | varchar | 25 | 图标 |
menu_name | varchar | 32 | 按钮名 |
module | varchar | 32 | 模块名 |
controller | varchar | 64 | 控制器 |
action | varchar | 32 | 方法名 |
params | varchar | 128 | 参数 |
path | varchar | 255 | 跳转路径 |
sort | tinyint | 3 | 排序 |
is_show | tinyint | 1 | 是否显示 |
3、角色管理表(配置管理员各种身份的表,主要用于关联权限表)
字段名称 | 类型 | 长度 | 注释 |
id | int | 10 | 身份管理id |
role_name | varchar | 32 | 身份管理名称 |
menus_id | text | 0 | 身份管理权限(menus_id)例如:1,2,3 |
status | tinyint | 1 | 状态 |
4、侧边栏整理遍历父子级代码
/**
* 初始化左菜单
* 先取出系统中所有菜单,
* 将菜单按父级子级关系分组
* 同时如果当前租户权限设置中限定了该菜单,则判断当前用户是否有权限访问当前页面,如果没有则过滤掉
*
* 已经修改了view类,给view方法设置默认参数,不需要每个页面都传入menus,此处写法是基于ThinkPhP 5.1 由于不是前后端分离所以将数据存储到view类里,便于前端读取
*/
protected function rolelist()
{
$seachmap = [];
if(Session::get('campus.user_role'))
{
$seachmap['role_code'] = Session::get('campus.user_role');
}else{
$seachmap['role_code'] = Session::get('admin.user_role');
}
$list = Users::instance()->getrolelist($seachmap); //根据权限查出当前用户所拥有的所有导航栏,然后进行处理。
$menus = [];
if (!empty($list->result)) {
// 遍历系统所有菜单
foreach ($list->result as $v) {
// 如果没有父级 则为根节点
if ($v['module_parentcode'] == 0) {
if(!isset($menus[$v['module_code']]))
{
$menus[$v['module_code']] = $v;
}
}
}
foreach ($list->result as $v)
{
foreach($menus as $key=>$value)
if($v['module_parentcode'] == $key)
{
if (!isset($menus[$value['module_code']]['child'][$v['module_code']]))
{
$menus[$value['module_code']]['child'][$v['module_code']] = $v;
}
}
}
}else{
Session::clear();
$this->error('您没有访问权限',url('/adminlogin/login'),'','2');
}
// 如果父级节点下 没有任何可以显示的子级节点,则不显示该父级
foreach ($menus as $k => $v) {
if (!isset($v['child'])||count($v['child']) == 0) {
unset($menus[$k]);
}
}
$menus['num'] = 0;
$this->view->set_default_vars(['menus' => $menus]);
return;
}