PHP:【商城后台管理系统】部署角色管理,角色添加,菜单权限,删除角色功能
一.角色管理界面
①首页

②角色添加

③角色编辑

④角色删除

二.部署流程

  • 部署流程

  • 后端采用thinkphp6.0框架,角色管理看似简单,但是在菜单权限这一块是很难得,为什么难呢?因为要设计菜单无限级构造树,还要将无限极菜单构造树递归遍历成二级菜单,这样才好将菜单渲染到视图层,在代码块注释中将有这些问题的解决方案。

  • 前端采用Layui框架

    HTML 代码块

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>管理员账号列表</title><link rel="stylesheet" href="/static/layui-v2.6.8/layui/css/layui.css" /><script src="/static/layui-v2.6.8/layui/layui.js"></script></head>
<body style="padding: 10px;min-width:737px"><div class="layui-item" ><span style="color: 777;font-size:20px;height:30px;line-height:30px">首页/</span><span style="color: ccc">角色列表</span><button class="layui-btn layui-btn-sm" style="float:right;margin:5px" onclick="add()">添加</button></div><table class="layui-table" ><thead><tr><th>ID</th><th>角色编号</th><th>角色名称</th><th>编辑</th></tr></thead><tbody>{foreach $data as $v}<tr><td>{$v['id']}</td><td>{$v['gid']}</td><td>{$v['title']}</td><td><button class="layui-btn layui-btn-sm " onclick="edit({$v['id']})">编辑</button><button class="layui-btn layui-btn-sm layui-btn-danger" onclick="dle({$v['id']})">删除</button></td></tr>{/foreach}</tbody></table>
</body>
<script>$ = layui.jquery;//编辑角色function edit(id) {layer.open({type:2,title: '编辑角色',shadeClose: true,shade: 0.8,area: ['500px', '500px'],content: '/admin/Group/edit?id='+id}); }//删除function dle(id) {layer.confirm('确定删除吗?', {btn: ['确定','取消'],},function(){let date = {};$.post('/admin/Group/dle?id='+id,date,function(res){if (res.id == 1) {layer.alert(res.msg,{icon:1});setTimeout(() => {window.location.reload();}, 1000);}else{layer.alert(res.msg,{icon:2});}},'json')});}//添加角色function add(){layer.open({type:2,title: '添加角色',shadeClose: true,shade: 0.8,area: ['500px', '500px'],content: '/admin/Group/add'}); }
</script>
</html>
PHP 代码块
<?php
namespace app\admin\controller;
use app\admin\controller\Base;
use think\facade\Request;
use think\facade\Db;
use think\facade\View;
use think\facade\Session;
/*** 角色管理*/
class Group extends Base
{//角色列表public function index(){   //角色渲染$data['group'] = Db::table('admin_group')->select()->toArray();View::assign(['data' => $data['group']]);return View('/group/index');}//角色添加public function add(){   if (Request::isPost()) {$data['gid'] = Request::post('gid');$data['title'] = Request::post('title');$data['rights'] = array_keys(Request::post('rights'));$data['rights'] = json_encode($data['rights']);if (empty($data['gid'])) {exit(json_encode(['id' => 0 ,'msg' => '角色编号不能为空']));}if (empty($data['title'])) {exit(json_encode(['id' => 0 ,'msg' => '角色名称不能为空']));}$insert = Db::table('admin_group')->insert($data);if (!empty($insert)) {echo json_encode(['id' => 1 ,'msg' => '角色添加成功']);}else {echo json_encode(['id' => 0 ,'msg' => '角色添加失败']);}}else {//角色权限菜单视图层渲染$tmp_menu_list = Db::table('admin_menu')->where('status',0)->select()->toArray();//将角色权限菜单数组下标换成角色的mid$menu_list = $this->SetKey($tmp_menu_list,array());//构造树菜单(无限级)$menus = $this->buildMenuTree($menu_list);//递归 构造树菜单(无限级)变成二级菜单$result = $this->SetMenu($menus,array());View::assign(['data' => $result,]);return View('/group/add');}}//角色编辑public function edit(){   if (Request::isPost()) {$id = Request::post('id');$data['title'] = Request::post('title');$data['rights'] = array_keys(Request::post('rights'));$data['rights'] = json_encode($data['rights']);if (empty($data['title'])) {exit(json_encode(['id' => 0 ,'msg' => '角色名称不能为空']));}$update = Db::table('admin_group')->where('id',$id)->update($data);if (!empty($update)) {echo json_encode(['id' => 1,'msg' => '保存成功']);}else {echo json_encode(['id' => 0,'msg' => '保存失败']);}}else {$id = Request::get('id');$data['group'] = Db::table('admin_group')->where('id',$id)->find();$data['group']['rights'] = json_decode($data['group']['rights'],true);//角色权限菜单视图层渲染$tmp_menu_list = Db::table('admin_menu')->where('status',0)->select()->toArray();//将角色权限菜单数组下标换成角色的mid$menu_list = $this->SetKey($tmp_menu_list,array());//构造树菜单(无限级)$menus = $this->buildMenuTree($menu_list);//递归 构造树菜单(无限级)变成二级菜单$result = $this->SetMenu($menus,array());View::assign(['result' => $result,'id' => $id,'group' => $data['group'],'rights' =>  $data['group']['rights']]);return View('/group/edit');}}//角色删除public function dle(){$id =  Request::param("id");if (!empty($id)) {$delete = Db::table("admin_group")->where('id',$id)->delete();}if (!empty($delete)) {echo json_encode(['id' => 1 ,'msg'=>'删除成功']);}else {echo json_encode(['id' => 0 ,'msg'=>'删除失败']);}}//将数组下标换成角色的midprivate function SetKey($item,$array){foreach ($item as $v) {$array[$v['mid']] = $v;}return $array;}//遍历递归menu菜单private function SetMenu($item,$array){foreach ($item as $value) {//如果构造树菜单的子菜单有children 则进行递归 如果没有则定位空数组$value['children'] = isset($value['children']) ?$this->formatMenus($value['children']) : [];//剩余则赋值给$result$array[] = $value;}return $array;}//构造树菜单(无限级)private function buildMenuTree($items){$tree = [];foreach ($items as $item) {//如果items 的 下标 是$item pid 则 创建新的children子数组存放 $itemif (isset($items[$item['pid']])) {$items[$item['pid']]['children'][] = &$items[$item['mid']];}else {$tree[] = &$items[$item['mid']];}}return $tree;}//递归 构造树菜单(无限级)变成二级菜单private function formatMenus($items,&$res=[]){foreach ($items as $item) {if (!isset($item['children'])) {//如果没有children 则存放在 $res$res[] = $item;}else {//如果有children 则进行递归处理$temp = $item['children'];//释放$item['children']unset($item['children']);$res[] = $item;$this->formatMenus($temp,$res);}}return $res;}
}

PHP:【商城后台管理系统】部署角色管理,角色添加,菜单权限,删除角色功能相关推荐

  1. SSM项目-商城后台管理系统

    SSM项目-商城后台管理系统 开发说明 开发环境 项目界面演示 项目功能 具体的技术指标 开发过程 1.搭建SSM框架 1.1.建库建表 1.2.新建Maven工程 1.3.配置pom.xml 1.4 ...

  2. PHP:【商城后台管理系统】admin超级管理员后台操作界面部署{无限级菜单}

    PHP:[商城后台管理系统]admin超级管理员后台操作界面部署{无限级菜单} 一.超级管理员后台操作界面 二.部署流程 界面部署流程 页眉栏:采用layui 50px 经典蓝 自设置用户信息Sess ...

  3. php商城后台管理,商城后台管理系统

    摘要:html> 商城后台管理系统商城后台管理系统 /*documentElement.clientHeight*/ .header{width:100%;height: 50px;line-h ...

  4. 基于java的商城后台管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java的商城后台管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java的商城后台管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 本源码技术栈 ...

  5. 后台管理系统、商品管理、商品发布、商品回收、订单管理、退款管理、运营管理、商城设置、导航分类、营销管理、优惠券套餐、数据统计、活跃用户、数据埋点、财务管理、对账单、财务数据、账户资产、电商后台

    后台管理系统.商品管理.商品发布.商品回收.订单管理.退款管理.运营管理.商城设置.导航分类.营销管理.优惠券套餐.数据统计.活跃用户.数据埋点.财务管理.对账单.财务数据.账户资产.账号管理.电商后 ...

  6. Axure高保真企业商城后台管理系统web端公司商城后台管理原型连锁门店管理系统交互组件点餐平台商家管理端后台库存管理财务管理系统管理接单管理

    作品介绍:Axure高保真企业商城后台管理系统&web端公司商城后台管理原型&连锁门店管理系统交互组件&点餐平台商家管理端后台&库存管理&财务管理&系统 ...

  7. 视频教程-vuecli实战商城后台管理系统-Vue

    vuecli实战商城后台管理系统 帝莎学院创始人&CEO,目前主要从事全栈开发.Python.PHP.小程序.App.Web等技术的研究和开发.专注于实战类教程,授课风趣幽默,讲解条理清晰.通 ...

  8. 基于SpringBoot开发的商城后台管理系统

    项目介绍 一款 Java 语言基于 SpringBoot2.x.Layui.Thymeleaf.MybatisPlus.Shiro.MySQL等框架精心打造的一款模块化.插件化.高性能的前后端分离架构 ...

  9. vuecli 实战商城后台管理系统_前台商城系统及后台管理系统

    概述内容 mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现. 前台商城系统包含首页门户.商品推荐.商品搜索.商品展示.购物车.订单流程.会员中心 ...

最新文章

  1. php类实例方法静态方法,PHP类中的静态方法使用实例
  2. 机器学习中常见的希腊字母
  3. [翻译]在GC上加入DPAD
  4. 提高篇 第一部分 基础算法 第4章 广搜的优化技巧
  5. checkcode.aspx 生成随即验证码
  6. [译] 或许你并不需要 Rust 和 WASM 来提升 JS 的执行效率 — 第二部分
  7. 不是我不想动脑筋,给我一个支点看看——看《编程之美》,玩数独,大有乐趣...
  8. 光谷码农·每日新闻(2019-05-09)
  9. mysql索引的方法_mysql索引类型和索引方法
  10. 专业的WiFi检测工具有哪些?如何解决wifi信号不好?
  11. 华氏温度转换为摄氏温度(PTA厦大慕课)
  12. 【历史上的今天】6 月 3 日:微软推出必应搜索引擎;Larry Roberts 启动阿帕网;Visual Basic 之父出生
  13. 苏州驾考科目三考试攻略
  14. java reuse_SO_REUSEADDR和SO_REUSEPORT的行为发生了变化?
  15. nmap常用命令/使用教程
  16. “linux系统内网穿透、外网访问”教程
  17. 大数据之MaxWell
  18. 怎么才能真正理解服务器是什么?
  19. 思科网络学院CCNA网络基础知识精华
  20. Zemax模拟物体通过透镜成像

热门文章

  1. QGC地面站使用教程
  2. Java虚拟机内存模型简单介绍
  3. 阿拉伯数字中文oracle,【oracle】中文数字转阿拉伯数字
  4. C语言第二课,分支语句和循环语句
  5. Web前端学完后薪资怎么样?取决你技术好坏
  6. 在项目中使用FTPClient上传文件遇到550 Fial to change directoty问题
  7. 最好的OCR识别(图片转换文字)工具:ABBYY FineReader
  8. 电路实验——实验三 叠加原理
  9. 动词ing基本用法_(完整版)英语动词ing的用法
  10. MeanTeacher文章解读+算法流程+核心代码详解