一:控制器部分

  1. <?php
  2. namespace app\controllers;
  3.  
  4. use yii\web\Controller;
  5.  
  6. class PreController extends Controller{
  7. public $enableCsrfValidation=false;
  8.  
  9. function actionIndex(){
  10.  
  11. return $this->render('index');
  12. }
  13.  
  14. function actionLogin(){
  15. $username= \Yii::$app->request->post('user');
  16.  
  17. $pwd=\Yii::$app->request->post('password');
  18. $data=\Yii::$app->db->createCommand("select*from `user` where username='$username' and password='$pwd'")->queryOne();
  19.  
  20. if($data){
  21. $session = \Yii::$app->session;
  22.  
  23. $session->set('uid', $data['id']);
  24. $id=$data['id'];
  25. //五表连查
  26. $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();
  27. //将查出的数据存储到session
  28. $session->set('power',json_encode($res));
  29. //跳转至权限页面
  30. return $this->redirect(['one/show']);
  31. }else{
  32. echo "<a href='index'>输入错误</a>";die;
  33. }
  34. }
  35.  
  36. }

二:权限部分,并进行CURD

  1. <?php
  2. namespace app\controllers;
  3.  
  4. use app\models\Zs;
  5. use yii\web\Controller;
  6.  
  7. class OneController extends Controller{
  8. //相当与构造函数
  9. function init()
  10. {
  11.  
  12. $session = \Yii::$app->session;
  13. $id=$session->get('uid');
  14. //非法登陆限制
  15. if(empty($id)){
  16. echo "<a href='/pre/index'>请先登陆</a>";die;
  17. }
  18. $power=$session->get('power');
  19. $data=json_decode($power);
  20. //当前访问的控制器和方法
  21. $now_url=\Yii::$app->requestedRoute;
  22.  
  23. foreach ($data as $k=>$v){
  24. //数据库中定义的控制器和方法
  25. $arr[]=$v->controller.'/'.$v->function;
  26. }
  27. //权限控制
  28. if(!in_array($now_url,$arr)){
  29. echo "<a href='/pre/index'>权限不够,请重新登陆</a>";die;
  30. }
  31.  
  32. }
  33.  
  34. function actionShow(){
  35.  
  36. $session = \Yii::$app->session;
  37. $data=json_decode($session->get('power'),1);
  38.  
  39. $res=$this->gettree($data,0);
  40. return $this->render('show',['data'=>$res]);
  41. }
  42. //递归实现
  43. function gettree($data,$pid){
  44. $tree=[];
  45. foreach ($data as $k=>$v){
  46. if($v['pid']==$pid){
  47. $v['son']=$this->gettree($data,$v['power_id']);
  48. $tree[]=$v;
  49. }
  50.  
  51. }
  52. return $tree;
  53. }
  54. //这是为了展示,方法名没有改
  55. function actionAdd(){
  56. $data=\Yii::$app->db->createCommand("select*from zs")->queryAll();
  57. return $this->render('add',['data'=>$data]);
  58. }
  59. //删除
  60. function actionDel(){
  61. $id=\Yii::$app->request->get('id');
  62. $res=\Yii::$app->db->createCommand("delete from zs where id=$id")->execute();
  63. if($res){
  64. return $this->redirect('add');
  65. }
  66. }
  67. }

三:展示用户当前权限

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport"
  6. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8. <title>Document</title>
  9. </head>
  10. <body>
  11. <table>
  12. <!-- 递归展示数据-->
  13. <?php foreach ($data as $k=>$v) {?>
  14. <tr>
  15. <?php echo $v['power'] ?><br>
  16. <?php foreach ($v['son'] as $kk=>$vv) {?>
  17. <a href="<?php echo $vv['function'] ?>"> <?php echo $vv['power'] ?></a><br>
  18. </tr>
  19. <?php }?>
  20. <?php }?>
  21. </table>
  22. </body>
  23. </html>

四:展示页面

  1. <?php
  2. $session = \Yii::$app->session;
  3.  
  4. ?>
  5. <!doctype html>
  6. <html lang="en">
  7. <head>
  8. <meta charset="UTF-8">
  9. <meta name="viewport"
  10. content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  11. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  12. <title>Document</title>
  13. </head>
  14. <body>
  15. <table border="1" class="table">
  16. <tr>
  17. <td>id</td>
  18. <td>用户</td>
  19. <td>手机</td>
  20. <td>街道</td>
  21. <td>操作</td>
  22. </tr>
  23. <?php foreach ($data as $k=>$v) {?>
  24. <tr>
  25. <td><?php echo $v['id'] ?></td>
  26. <td><?php echo $v['name'] ?></td>
  27. <td><?php echo $v['tel'] ?></td>
  28. <td><?php echo $v['stree'] ?></td>
  29. <!-- 删除按钮:管理员可删除,普通用户点击不会删除-->
  30. <?php if($session->get('uid')==1){?>
  31.  
  32. <td><a href="del?id=<?php echo $v['id'] ?>" class="del" id="<?php echo $v['id'] ?>">删除</a></td>
  33.  
  34. <?php }else {?>
  35. <td><a href="#" class="del" id="<?php echo $v['id'] ?>">删除</a></td>
  36. <?php }?>
  37. </tr>
  38. <?php }?>
  39. </table>
  40. </body>
  41. </html>
  42. <script src="../jquery-3.3.1.min.js"></script>
  43. <script>
  44.  
  45. </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. jQuery事件之绑定事件

    语法: $(selector).bind(eventType[, eventData], handler(eventObject)); 参数解释: eventType(String): 一个包含一个或 ...

  2. TNS-12560: TNS: 协议适配器错误

    TNS-12560: TNS: 协议适配器错误   Microsoft Windows [版本 5.2.3790] (C) 版权所有 1985-2003 Microsoft Corp. C:\Docu ...

  3. P1200 [USACO1.1]你的飞碟在这儿Your Ride Is Here

    输入格式: 第1行:一个长度为111到666的大写字母串,表示彗星的名字. 第2行:一个长度为111到666的大写字母串,表示队伍的名字. 输出格式: 如果能搭配,就输出“GO”,否则输出“STAY” ...

  4. hbase基于hue的查询语法

    hbase基于hue的查询语法 登录地址 https://hue-ui.xiaoniangao.cn 界面操作说明 进入hue中的hbase 进入表的查询界面 界面说明 查询语句 ,表示结束查询,可以 ...

  5. IntelliJ IDEA工具增加test测试方法,报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误

    是因为我在IntelliJ IDEA中,通过plugins增加 插件的时候,在 增加的测试类是junit4.12,改版本的jar包不再包含hamcrest-library.jar .我是通过将自己的项 ...

  6. (三)C语言之变量

  7. C++ 学习时的错误记录

    1. 关于C++相关的文件扩展名 c++程序中的头文件扩展名包括: .h .hpp .hxx C++程序中源文件的扩展名包括: .cc .cpp .cxx 2.C++程序编译过程 3. 处理错误 4. ...

  8. WebSocket-nodejs实现

    一.环境配置 1.下载安装nodejs      https://nodejs.org/en/download/ 2.安装完成后打开cmd命令,执行node --version,看看是否安装成功,如果 ...

  9. Struts2.3+Spring3.2+Hibernate4.2框架搭建

    一.环境 SSH使用的版本:struts2.3.14.spring3.2.2.hibernate4.2.0 数据库:MYSQL tomcat版本:apache-tomcat-7.0.42 二.所需要导 ...

  10. Python 中的type和object详解

    1.python中的类 Python2.x 中的类分为两种,一种是所有继承自object的新式类,另外一种是经典类classobj, 新式类的写法: class A(object): pass 经典类 ...