TP框架学习笔记第四天

来源:互联网 发布:淘宝三级页面打不开 编辑:程序博客网 时间:2024/06/05 03:31

此文章为自己书写,在Word上做的笔记,然后拷贝到这上边的,无任何抄袭。另外若是程序有任何问题可以评论,也可私信我。
若是想看整个学习笔记代码和数据库可点击此处(包含个人书写的项目代码及数据库文件)。

第四天

1.RBAC

RBAC:role base access control 基于角色的用户访问权限控制

这里写图片描述
1.1传统方式权限分配
具体操作权限与用户直接联系:
这里写图片描述
该方式设置权限的特点:
管理员需要为新增、离职的用户进行具体的权限分配,操作的时候效率低下、设置权限没有统一标准,较凌乱,不适合大项目使用。
1.2基于角色权限分配
这里写图片描述
刚方式权限设置的特点:
用户–>角色(组)–>权限
每个组可以对应多个权限,是已经准备好的工作(无需后期设置)。
管理员进行权限设置时只需要考虑用户属于哪个组即可,操作非常容易、高效、简便。是一种非常科学的权限设置方式。
1.3数据模拟
(1)权限数据
商品管理(商品列表、添加商品、商品分类)
订单管理(订单列表、订单查询、订单打印)
权限管理(管理员列表、角色管理、权限列表)
auth_id auth_name auth_pid auth_c auth_a auth_path auth_level
insert into sw_auth values(100,’商品管理’,0,”,”,100,0);
insert into sw_auth values(101,’订单管理’,0,”,”,101,0);
insert into sw_auth values(102,’权限管理’,0,”,”,102,0);

insert into sw_auth values(103,’商品列表’,100,’Goods’,’showlist’,’100-103’,1);
insert into sw_auth values(104,’商品添加’,100,’Goods’,’tianjia’,’100-104’,1);
insert into sw_auth values(105,’商品分类’,100,’Goods’,’category’,’100-105’,1);

insert into sw_auth values(106,’订单列表’,101,’Order’,’showlist’,’101-106’,1);
insert into sw_auth values(107,’订单查询’,101,’Order’,’look’,’101-107’,1);
insert into sw_auth values(108,’订单打印’,101,’Order’,’dayin’,’101-108’,1);

insert into sw_auth values(109,’管理员列表’,102,’Manager’,’showlist’,’102-109’,1);
insert into sw_auth values(110,’角色管理’,102,’Role’,’showlist’,’102-110’,1);
insert into sw_auth values(111,’权限列表’,102,’Auth’,’showlist’,’102-111’,1);

(2)角色数据(主管{[商品管理(商品列表、添加商品)],[ 订单管理(订单列表、订单查询)]}、经理{[订单管理(订单列表、订单查询、订单打印)]})
role_id role_name role_auth_ids role_auth_ac
insert into sw_role values(10,’主管’,’100,103,104,101,106,107’,’Goods_showlist, Goods_tianjia, Order_showlist,Order_look ‘)
insert into sw_role values(10,’经理’,’101,106,107,108 ‘,’Order_showlist, Order_look, Order_dayin ‘)

2.管理员登录显示对应的权限

2.1普通用户显示本身拥有的权限
控制器中获取权限的代码:
这里写图片描述
视图中显示权限的代码:
这里写图片描述
另外if标签判断子级权限是否属于父级权限。
2.2admin管理员显示全部的权限
只在控制器中进行修改:
这里写图片描述

3.角色数据维护

3.1显示角色列表
角色控制器:
这里写图片描述
角色展示页面:
这里写图片描述
3.2分配权限
角色控制器代码:
这里写图片描述
角色权限展示页面:
这里写图片描述
角色权限表单信息的设置:
这里写图片描述
这里写图片描述
将权限分配信息处理并存到数据库中
角色控制器中代码:
这里写图片描述
角色模型中代码:
这里写图片描述
将拥有的权限设置为选择:
每次给角色分配权限的时候,把已经拥有的权限显示出来。
实现其功能就是一个判断过程。
1.在表单页面中全部的权限都已经展示出来
2.把被分配权限的角色已经拥有的权限信息查询获得出来,并传递给模板。
判断:拥有的权限是否存在于全部权限里边,存在就打对勾。
这里写图片描述
这里写图片描述
3.3权限数据的维护
3.3.1列表显示
控制器:AuthController.class.php
方法:function showlist
查询数据:D(‘Auth’)->select();
模板:$this->display() View/Auth/showlist.html
控制器中的代码:
这里写图片描述
页面中的代码:
这里写图片描述
3.3.2添加权限操作
步骤:
1.控制器和操作方法
AuthController/tianjia
这里写图片描述
2.制作添加表单
View/Auth/tianjia.html
这里写图片描述
3.收集表单信息
AuthController/tianjia
这里写图片描述
4.实现数据入库
表单收集的信息不能完全实现入库,auth_path、auth_level不能直接入库,需要根据数据库的格式进行制作。
这里写图片描述
4.翻墙访问
我们只是通过程序设置了可以根据“用户-角色”显示对应的权限,但是并没有限制用户访问一些不具备的权限,这样就会出现访问漏洞(用户会不小心越权访问其他的权限)。再者也可以手动输入控制器、操作方法路由信息进而访问本身不存在的一些权限。
这里写图片描述
解决翻墙访问:
对用户访问的每个操作方法都设置过滤功能,被访问的方法必须是用户拥有的权限才可以进行访问。
该访问过滤为了避免开发重复的代码要设置在父类的__construct()构造方法中,这个父类又不能是Controller,这样我们只能开发一个AdminController,他们的继承关系如上图。
获得用户当前访问的“控制器C-操作方法A”信息。
把CA信息与用户(角色)的权限做过滤对比。
该“过滤对比”工作要在父类控制器(构造方法)里边实现。
4.1创建AdminController并实现
class AdminController extends Controller{
public function __construct(){
parent::__construct();//避免覆盖父类的构造方法,将其提前执行
//获得当前控制器和操作方法
nowac=CONTROLLERNAME..ACTIONNAME;//访//adminid>role>authadmin_id = session(‘admin_id’);
adminname=session(adminname);manager_info = D('Manager')->select(adminid);role_id = managerinfo[mgroleid];role_info = D('Role')->find(roleid);role_auth_ac = roleinfo[roleauthac];//访allow_ac = ‘Manager-login,Manager-logout,
Manager-verifyImg,Index-index,
Index-left,Index-right,Index-head’;
//越权访问过滤判断
//1.当前访问的权限必须出现在其权限列表里
//2.当前访问的权限不在默认访问的权限中
//3.访问者不是超级管理员
//当前访问的权限与允许访问的权限进行对比
if(admin_name!=='admin'&&strpos(role_auth_ac, nowac)===false&&strpos(allow_ac, nowac)===false){  
            exit(‘没有权限’);  
            //
this->redirect(‘Home/Goods/showlist’,null,2,’您没有当前的权限进行访问!即将跳转至主页…’);
}
}
}
4.2每个后台的控制器都继承AdminController
这里写图片描述
4.3登录验证
没有登录系统的用户访问后台,自动跳转到登录页面。
当前系统未登录的用户访问功能模块的时候,会把第一个管理员的权限用于使用。
这里写图片描述

1 0
原创粉丝点击