角色表结构如下:

权限表结构如下:

控制器代码:

  //递归查询权限列表
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. 华为开发者大会主题演讲:3D建模服务让内容高效生产

    内容来源:华为开发者大会2021 HMS Core 6 Graphics技术论坛,主题演讲<3D建模服务使能3D内容高效生产>. 演讲嘉宾:华为消费者云服务 AI算法专家 3D建模服务(3 ...

  2. go微服务框架Kratos笔记(六)链路追踪实战

    什么是链路追踪 借用阿里云链路追踪文档来解释 分布式链路追踪(Distributed Tracing),也叫 分布式链路跟踪,分布式跟踪,分布式追踪 等等,它为分布式应用的开发者提供了完整的调用链路还 ...

  3. python实现模板匹配

    目录: (一)原理 (二)代码实现和几种常见的模板匹配算法 正文: (一)原理 在待检测图像上,从左到右,从上向下计算模板图像与重叠子图像的匹配度,匹配程度越大,两者相同的可能性越大. 作用有局限性, ...

  4. [bzoj1145]图腾

    如果将关系用一个数字来表示(相等表示不确定),那么题目相当于要计算$1324-1243-1432$=$(1323-1423)-(1233-1234)-(1322-1423)$=$1323+1234-( ...

  5. Protocol Buffer序列化Java框架-Protostuff

    了解Protocol Buffer 首先要知道什么是Protocol Buffer,在编程过程中,当涉及数据交换时,我们往往需要将对象进行序列化然后再传输.常见的序列化的格式有JSON,XML等,这些 ...

  6. Codeforces 1442D - Sum(找性质+分治+背包)

    Codeforces 题面传送门 & 洛谷题面传送门 智商掉线/ll 本来以为是个奇怪的反悔贪心,然后便一直往反悔贪心的方向想就没想出来,看了题解才发现是个 nb 结论题. Conclusio ...

  7. CF 585 E Present for Vitalik the Philatelist

    CF 585 E Present for Vitalik the Philatelist 我们假设 $ f(x) $ 表示与 $ x $ 互质的数的个数,$ s(x) $ 为 gcd 为 $ x $ ...

  8. MYSQL5.8----2

    一定要按照这个顺序,where group by having order by limit 可以进行一次排序之后再一次拍寻 #存储的时候,能存数字就村数字

  9. ubuntu20.04安装EasyConnect兼容性问题解决

    目录 1. 命令行启动EasyConnect 2. 降级pango 3. 重新启动EasyConnect,即可成功启动 Ubuntu20.04安装EasyConnect后无法启动的解决方案 工作使用操 ...

  10. Web网页服务器软件——介绍

    Web网页服务器软件与硬件服务器的关系,就像软件和电脑的关系. 目前有,世界使用排列第一名的Apache.还有可以在Linux系统下快速方便地搭建出LNMP Web服务环境的Nginx(其中LNMP分 ...