角色表结构如下:

权限表结构如下:

控制器代码:

  //递归查询权限列表
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. [loj6518]序列

    参考ExtremeSpanningTrees,考虑优化整体二分时求$g_{i}\in \{w_{mid},w_{mid+1}\}$的最优解 首先题目有一个条件似乎没有写出来,是保证$l\le k\le ...

  2. [atAGC051C]Flipper

    对于这一个平面用$a_{x,y}$来表示,即$(x,y)$为黑色则$a_{x,y}=1$,否则$a_{x,y}=0$,之后定义$a$能生成$b$当且仅当$a$能够通过若干次操作后得到$b$ 令$p_{ ...

  3. [atARC080F]Prime Flip

    构造一个数组$b_{i}$(初始为0),对于操作$[l_{i},r_{i}]$,令$b_{l_{i}}$和$b_{r_{i}+1}$值异或1,表示$i$和$i-1$的差值发生改变,最终即要求若干个$b ...

  4. [luogu5654]基础函数练习题

    答案即区间$[l,r]$的笛卡尔树上,左右子树有一个为空的点到根路径和(定义此为的该点答案)的max, 对求区间笛卡尔树复杂度为$o(n)$,无法通过,因此在全局笛卡尔树中考虑此问题 设$k$为$l$ ...

  5. es使用java的api操作

    基本环境的创建 pom依赖  <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q ...

  6. ICCV2021 | Swin Transformer: 使用移位窗口的分层视觉Transformer

    ​  前言  本文解读的论文是ICCV2021中的最佳论文,在短短几个月内,google scholar上有388引用次数,github上有6.1k star. 本文来自公众号CV技术指南的论文分享系 ...

  7. python-面向过程、面向对象、类

    目录 python-面向过程.面向对象.类 面向过程编程 面向对象 类和对象 二者区别 定义格式: 定义类发生的事情 定义类的标准格式 属性的查找顺序 python-面向过程.面向对象.类 面向过程编 ...

  8. UOJ #36 -【清华集训2014】玛里苟斯(线性基+暴搜)

    UOJ 题面传送门 看到 \(k\) 次方的期望可以很自然地想到利用低次方和维护高次方和的套路进行处理,不过.由于这里的 \(k\) 达到 \(5\),直接这么处理一来繁琐,二来会爆 long lon ...

  9. 解决install_github安装R包时无法打开(cannot open)URL?

    最近安装github上的R包,经常显示Error in utils::download.file(url, path, method = method, quiet = quiet, : 无法打开UR ...

  10. R语言与医学统计图形【4】直方图、金字塔图

    R语言基础绘图系统 基础图形--直方图.金字塔图 3.直方图 参数设置及比较. op <- par(mfrow=c(2,3)) data <- rnorm(100,10,5) hist(d ...