一:控制器部分

 <?php
namespace app\controllers; use yii\web\Controller; class PreController extends Controller{
public $enableCsrfValidation=false; function actionIndex(){ return $this->render('index');
} function actionLogin(){
$username= \Yii::$app->request->post('user'); $pwd=\Yii::$app->request->post('password');
$data=\Yii::$app->db->createCommand("select*from `user` where username='$username' and password='$pwd'")->queryOne(); if($data){
$session = \Yii::$app->session; $session->set('uid', $data['id']);
$id=$data['id'];
//五表连查
$res=\Yii::$app->db->createCommand("select *from user join u_r on user.id=u_r.u_id join role on u_r.r_id=role.r_id join r_p on role.r_id=r_p.rid join power on r_p.p_id=power.power_id where user.id=$id")->queryAll();
//将查出的数据存储到session
$session->set('power',json_encode($res));
//跳转至权限页面
return $this->redirect(['one/show']);
}else{
echo "<a href='index'>输入错误</a>";die;
}
} }

二:权限部分,并进行CURD

<?php
namespace app\controllers; use app\models\Zs;
use yii\web\Controller; class OneController extends Controller{
//相当与构造函数
function init()
{ $session = \Yii::$app->session;
$id=$session->get('uid');
//非法登陆限制
if(empty($id)){
echo "<a href='/pre/index'>请先登陆</a>";die;
}
$power=$session->get('power');
$data=json_decode($power);
//当前访问的控制器和方法
$now_url=\Yii::$app->requestedRoute; foreach ($data as $k=>$v){
//数据库中定义的控制器和方法
$arr[]=$v->controller.'/'.$v->function;
}
//权限控制
if(!in_array($now_url,$arr)){
echo "<a href='/pre/index'>权限不够,请重新登陆</a>";die;
} } function actionShow(){ $session = \Yii::$app->session;
$data=json_decode($session->get('power'),1); $res=$this->gettree($data,0);
return $this->render('show',['data'=>$res]);
}
//递归实现
function gettree($data,$pid){
$tree=[];
foreach ($data as $k=>$v){
if($v['pid']==$pid){
$v['son']=$this->gettree($data,$v['power_id']);
$tree[]=$v;
} }
return $tree;
}
//这是为了展示,方法名没有改
function actionAdd(){
$data=\Yii::$app->db->createCommand("select*from zs")->queryAll();
return $this->render('add',['data'=>$data]);
}
//删除
function actionDel(){
$id=\Yii::$app->request->get('id');
$res=\Yii::$app->db->createCommand("delete from zs where id=$id")->execute();
if($res){
return $this->redirect('add');
}
}
}

三:展示用户当前权限

 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<table>
<!-- 递归展示数据-->
<?php foreach ($data as $k=>$v) {?>
<tr>
<?php echo $v['power'] ?><br>
<?php foreach ($v['son'] as $kk=>$vv) {?>
<a href="<?php echo $vv['function'] ?>"> <?php echo $vv['power'] ?></a><br>
</tr>
<?php }?>
<?php }?>
</table>
</body>
</html>

四:展示页面

 <?php
$session = \Yii::$app->session; ?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<table border="1" class="table">
<tr>
<td>id</td>
<td>用户</td>
<td>手机</td>
<td>街道</td>
<td>操作</td>
</tr>
<?php foreach ($data as $k=>$v) {?>
<tr>
<td><?php echo $v['id'] ?></td>
<td><?php echo $v['name'] ?></td>
<td><?php echo $v['tel'] ?></td>
<td><?php echo $v['stree'] ?></td>
<!-- 删除按钮:管理员可删除,普通用户点击不会删除-->
<?php if($session->get('uid')==1){?> <td><a href="del?id=<?php echo $v['id'] ?>" class="del" id="<?php echo $v['id'] ?>">删除</a></td> <?php }else {?>
<td><a href="#" class="del" id="<?php echo $v['id'] ?>">删除</a></td>
<?php }?>
</tr>
<?php }?>
</table>
</body>
</html>
<script src="../jquery-3.3.1.min.js"></script>
<script> </script>

5表联查yii框架权限控制的更多相关文章

  1. 开启sentry权限控制hue

    参考: cloudera官方授权:包括webui, ldap,sentry https://www.cloudera.com/documentation/enterprise/6/6.2/topics ...

  2. Yii 框架的Rbac [权限控制]

    转载自 xmlife 的博客 : http://blog.csdn.net/xmlife/article/details/50733451 1.首先我们要在配置文件的组件(component)里面配置 ...

  3. YII框架中的srbac权限管理模块的安全与使用(版本是1.1.20)

    0x01 前言 srbac的原理: YII框架的srbac模块是一个专门管理权限的一个模块,那它是怎么管理权限的呢.我们知道YII框架的网页显示是由控制器实现的,控制器继承父类CController和 ...

  4. ThinkPHP框架下基于RBAC的权限控制模式详解

    这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...

  5. 权限控制框架Spring Security 和Shiro 的总结

    关于权限控制,一开始感觉比较难,后来先是接触了Spring Security 学起来也比较吃力,再是学习了Shiro,感觉简单很多. 总体来说这些框架,主要做了两个事情 Authentication: ...

  6. JAVAEE——BOS物流项目10:权限概述、常见的权限控制方式、apache shiro框架简介、基于shiro框架进行认证操作

    1 学习计划 1.演示权限demo 2.权限概述 n 认证 n 授权 3.常见的权限控制方式 n url拦截权限控制 n 方法注解权限控制 4.创建权限数据模型 n 权限表 n 角色表 n 用户表 n ...

  7. webapi框架搭建-安全机制(四)-可配置的基于角色的权限控制

    webapi框架搭建系列博客 在上一篇的webapi框架搭建-安全机制(三)-简单的基于角色的权限控制,某个角色拥有哪些接口的权限是用硬编码的方式写在接口上的,如RBAuthorize(Roles = ...

  8. webapi框架搭建-安全机制(三)-简单的基于角色的权限控制

    webapi框架搭建系列博客 上一篇已经完成了“身份验证”,如果只是想简单的实现基于角色的权限管理,我们基本上不用写代码,微软已经提供了authorize特性,直接用就行. Authorize特性的使 ...

  9. ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理

    在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...

随机推荐

  1. vue中使用laydate.js插件

    1.到官网下载laydate.js https://www.layui.com/laydate/ 2.下载好后,将包解压好放在index.html同级的地方.我是在public中建立个statick文 ...

  2. JVM GC之对象生死

    1.简述 在Java内存运行时区域的各个部分中,程序计数器.虚拟机栈.本地方法栈3个区域随着线程而生,随着线程而亡.栈中的栈帧随着方法的进入和退出而有条不紊的进行着入栈和出栈操作. 每个栈帧需要分配多 ...

  3. Java_GUI小游戏--贪吃蛇

    贪吃蛇游戏:是一条蛇在封闭围墙里,围墙里随机出现一个食物,通过按键盘四个光标键控制蛇向上下左右四个方向移动,蛇头撞倒食物,则食物被吃掉,蛇身体长一节,接着又出现食物,等待蛇来吃,如果蛇在移动中撞到墙或 ...

  4. 微信公众号实现无限制推送模板消息!可向指定openID群发

    微信认证的服务号才有推送模板消息接口所以本文需要在认证服务号的情况下学习 以上就是模板消息,只有文字和跳转链接,没有封面图.在服务号的后台添加功能插件-模板消息即可. 模板消息,都是在后台选择一个群发 ...

  5. SRS之TS封装PAT和PMT

    1. SrsTsContext::encode_pat_pmt 在该函数中,将 PAT 和 PMT 封装到 TS Packet 中,并将这两个 TS packet 写入到 ts 文件中. /* the ...

  6. __declspec(dllexport)的使用

    1. 用法 在 VS 的“预编译”选项里定义_EXPORTING宏 #ifdef _EXPORTING #define API_DECLSPEC __declspec(dllexport) #else ...

  7. 开源运维自动化平台-opendevops

    开源运维自动化平台-opendevops 简介 官网 | Github|  在线体验 CODO是一款为用户提供企业多混合云.自动化运维.完全开源的云管理平台. CODO前端基于Vue iview开发. ...

  8. centos7配置外网

    1设置网络连接中的NAT网络配置 2虚拟机的网络设置选择NAT连接设置如下,子网IP可通过ipconfig查看本地VMnet8,如我本地VMnet8 ip为:192.168.198.0 3 3.开启虚 ...

  9. 解剖PTP协议

    一. PTP是什么? 英文为Precise Time Protocol,翻译过来就是精确时间协议 二. 为何会出现PTP? 大家想必是知道NTP的存在,然而NTP的精度很低,只能达到毫秒级别的精度,那 ...

  10. Json文件删除元素

    方法1:delete 注意,该方法删除之后的元素会变为null,并非真正的删除!!! 举例: 原json: { "front" : { "image" : [ ...