角色表结构如下:

权限表结构如下:

控制器代码:

  //递归查询权限列表
public function index(){
$data = ManagePermissionModel::query()->get()->toArray();
$array = $this->recursion($data, $pid = 0);
return $this->success($array);
} /***
* 获取取全树
*/
public function navList(){
$operationModel = new ManagePermissionModel();
$query = $operationModel->where('type','<>','a')->orderBy('sort', 'asc')->get()->toArray();
$tree = PHPTree::makeTreeForHtml($query,array(
'parent_key' => 'pid',
'primary_name' => 'name',
'primary_code' => 'code',
));
return $this->success($tree);
} public function menus(){
$operationModel = new ManagePermissionModel();
$menus = $operationModel->where('perm_type','<',3)->orderBy('sort', 'asc')->get()->toArray();
$r = PHPTree::makeTreeForHtml($menus,array(
'parent_key' => 'pid',
'primary_name' => 'name',
'primary_code' => 'code',
));
return $this->success($r);
} /**
* 创建栏目
* @param OperationRequest $request
*/
public function create(OperationRequest $request){
$operation = [
'permission_name' => $request->permission_name,
'address' => $request->address,
'type' => $request->type,
'pid' => $request->pid,
'parent_menu_id' => $request->parent_menu_id,
'perm_type' => $request->perm_type,
'sort' => $request->sort,
];
$addPermission = ManagePermissionModel::query()->create($operation);
if ($addPermission){
return $this->success($addPermission, "创建成功");
} else {
return $this->failed("创建失败");
}
} public function del(CheckIdRequest $request){
$id = $request->id;
$del = ManagePermissionModel::query()->where(['id' => $id])->delete();
if ($del){
return $this->success($del, "删除成功");
}else{
return $this->failed("删除失败");
}
} public function edit(OperationRequest $request){
if (empty($request['id']) || !is_numeric($request['id'])){
return $this->failed("非法传参");
}
$operation = [
'permission_name' => $request->permission_name,
'address' => $request->address,
'type' => $request->type,
'pid' => $request->pid,
'parent_menu_id' => $request->parent_menu_id,
'id' => $request->id,
'perm_type' => $request->perm_type,
'sort' => $request->sort,
];
$edit = ManagePermissionModel::query()->where(['id' => $operation['id']])->update($operation);
if ($edit){
return $this->success($edit, "修改成功");
} else {
return $this->failed("修改失败");
}
}

模型层代码:

/**
* 根据传过来的数组,构建以parent_menu_id为父节点的菜单树..
* @param $list 构建树所需要的节点,此值是根据权限节点算出来的
* @param $parent_menu_id 构建树的根节点
* @return array
*/
public function createTree($list,$parent_menu_id){
$data = [];
foreach($list as $k => $v){
if($v['parent_menu_id'] == $parent_menu_id){
$row = $v;
//取当前节点的url
// $row['url'] = $this->getUrl($v['id']);
$row['children'] = $this->createTree($list,$v['id']);
$data[] = $row;
}
}
return $data;
} /**
* 根据当前节点,取出当前节点的url,用于后台菜单节点的url生成
* @param $operation_id
* @param $list
*/
private function getUrl($operation_id){
static $list = [];
if(!$list){
$all = ManagePermissionModel::query()->get();
if(!$all->isEmpty()){
$all = $all->toArray();
}else{
$all = [];
}
foreach($all as $v){
$list[$v['id']] = $v;
}
} if(!isset($list[$operation_id])){
return "";
}
if($list[$operation_id]['type'] == 'm'){
return url($list[$operation_id]['code'] . '/index/index'); //一个模型,搞什么url?
}
if($list[$operation_id]['type'] == 'c'){
if(isset($list[$list[$operation_id]['pid']])){
return url($list[$list[$operation_id]['pid']]['code'] . '/'.$list[$operation_id]['code'].'/index');
}else{
return "";
}
}
if($list[$operation_id]['type'] == 'a'){
//取控制器
if(isset($list[$list[$operation_id]['pid']]) && isset($list[$list[$list[$operation_id]['pid']]['pid']])){
return url($list[$list[$list[$operation_id]['pid']]['pid']]['code'] . '/'.$list[$list[$operation_id]['pid']]['code'].'/'.$list[$operation_id]['code']);
}else{
return "";
}
}
return "";
}

在Laravel框架配置里封装:

配置目录:

封装代码:

/**
* 根据父级id查找子级数据
* @param $data 要查询的数据
* @param int $pid 父级id
*/
public function recursion($data, $pid = 0)
{
// 定义存储子级数据数组
$child = [];
foreach ($data as $key => $value) {
if ($value['pid'] == $pid) {
// 使用过后可以销毁
unset($data[$key]);
// 递归调用,查找当前数据的子级
$value['child'] = $this->recursion($data, $value['id']);
// 把子级数据添加进数组
$child[] = $value;
}
}
return $child;
}

  

Laravel框架角色、权限的更多相关文章

  1. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明     ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框 ...

  2. DRF框架之 用户角色权限与访问频率的权限设置

    1. 简单演示,创建一个models的数据库表 class User(models.Model): name=models.CharField(max_length=32) pwd=models.Ch ...

  3. [php]laravel框架容器管理的一些要点

    本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...

  4. 使用 Laravel 框架:成为微信公众平台开发者

    转: http://ninghao.net/blog/1441 作者:王皓发布于:2014-05-30 13:16更新于:2014-05-31 12:05 我们可以使用Laravel 框架为微信公众平 ...

  5. [.Net MVC] 用户角色权限管理_使用CLK.AspNet.Identity

    项目:后台管理平台 意义:一个完整的管理平台需要提供用户注册.登录等功能,以及认证和授权功能. 一.为何使用CLK.AspNet.Identity 首先简要说明所采取的权限控制方式.这里采用了基于角色 ...

  6. laravel框架详解

    一.基础篇 1.概念 Laravel是一个有着美好前景的年轻框架,它的社区充满着活力,同时提供了完整而清晰的文档,而且为快速.安全地开发现代应用提供了必要的功能.2011年,Taylor Otwell ...

  7. laravel框架容器管理

    来自http://www.cnblogs.com/chy1000/p/7072936.html 本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章 ...

  8. laravel框架入门

    本文摘自网络,个人感觉写的很不错,决定收藏一下纯属本人学习之用 本文介绍如何开始使用 Laravel. 读完本文,你将学到: 如何安装 Laravel,新建 Laravel 程序,如何连接数据库: L ...

  9. Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

随机推荐

  1. 大爽Python入门教程 3-6 答案

    大爽Python入门公开课教案 点击查看教程总目录 1 求平方和 使用循环,计算列表所有项的平方和,并输出这个和. 列表示例 lst = [8, 5, 7, 12, 19, 21, 10, 3, 2, ...

  2. xpath的chrome插件安装,xpath基本语法

    xpath插件安装: 注意:提前安装xpath插件 (1)打开chrome浏览器 (2)点击右上角小圆点 (3)更多工具 (4)扩展程序 (5)拖拽xpath插件到扩展程序中 (6)如果crx文件失效 ...

  3. 菜鸡的Java笔记 第六 - java 方法

    前提:现在所讲解的方法定义格式,只属于JAVA 方法定义的其中一种组成方式.而完整的组成方式将随着学习逐步渗透. 1.方法的基本定义 方法(Method)在一些书中也会有人将其说是  函数(Funct ...

  4. html+css第三篇

    css reset 原则: 但凡是浏览默认的样式,都不要使用. body,dl,dd,p,h1,h2,h3,h4,h5,h6{margin:0;font-size:12px;} ol,ul{margi ...

  5. 初识XSS攻击

    初识XSS攻击 本文参考于<白帽子讲Web安全>第3章跨站脚本攻击(XSS),该书出版于2014年,因而现在可能存在一些新场景或新技术而未被提及,但本文对学习和了解XSS攻击仍具有重要价值 ...

  6. pycahrm下载

    下载地址: https://www.jetbrains.com/pycharm/download/#section=windows 下载社区版本,不用破解,可以直接使用

  7. [FJOI2021]游记

    高一这条命早在\(NOIP\)就没了,现在不过是强行续命罢了,希望死的不要很难看. 高二重开一档,最后一条命了,希望能高二进队\(Orz\). \(Day -2\) 开始敲板子. 先写了个交互的题,猜 ...

  8. 压力测试工具——apchebench(简称ab)

    ab的原理 ab的原理:ab命令会创建多个并发访问线程,模拟多个访问者同时对某一URL地址进行访问.它的测试目标是基于URL的,因此,它既可以用来测试apache的负载压力,也可以测试nginx.li ...

  9. Python基础之基本运算符

    目录 1. 算数运算符 2. 比较运算符 3. 赋值运算符 4. 逻辑运算符 5. 身份运算 6. 运算符优先级 1. 算数运算符 常用算术运算符使用方法如下: x = 5 y = 2 a = x + ...

  10. Python基础之列表内置方法

    目录 1. 列表 1.1 序列 1.2 通用的序列操作 1.3 列表的基本操作 1.4 列表方法 1. 列表 数据结构:以某种方式(如通过编号)组合起来的元素(如数,字符乃至其他数据结构)集合. 在p ...