黑马程序员技术交流社区
标题: 【黑马程序员杭州】PHP项目day03--RBAC权限控制控制 [打印本页]
作者: 小江哥 时间: 2017-12-5 13:26
标题: 【黑马程序员杭州】PHP项目day03--RBAC权限控制控制
本帖最后由 小江哥 于 2017-12-5 14:33 编辑
各位同学,大家好!欢迎关注我们杭州黑马PHP课程,接下来的一段时间我们将会有不同阶段的老师给同学们分享PHP课程的基础篇以及项目篇。这节课程主要是给大家分享项目篇。从项目的部署一直到项目的整理架构,流程,希望能给大家的编程学习带来帮助,当然在学习中遇到了问题也可以回帖进行提问,我们还会不定时的在公众平台派送一些意想不到的惊喜呦!!!
今天接着给大家分享项目的第三天---RBAC权限控制控制
一、RBAC权限管理概述
1.1、权限控制介绍权限就是是否能够访问某个页面。而某个页面对应代码中就是具体的方法。通过代码控制不同的管理员是否能够访问某个方法的过程就是权限控制。经常实现权限控制的方式就是使用RBAC的方式
1.2、RBAC方式权限控制基基于角色的权限控制。一个管理员属于某种角色。而某种角色具备了多个操作权限。因此管理员也具备了角色所对应的权限。
1.3、RBAC具体要实现的功能1、实现用户的管理功能(实现对用户的增删改查)
2、实现角色的管理功能(增删改查)
3、实现权限的增删改查(对于权限的增删改查一般都是由开发者实现)
4、实现能够给用户赋予角色
5、实现能够给角色赋予权限
6、根据用户的角色不同显示出不同的导航菜单方便用户进行操作
7、针对所有的用户访问每一个访问都进行判断是否能够访问
8、预留一个默认的超级管理员角色
9、预留一个超级管理员的用户
二、RBAC数据表创建2.1、管理员表CREATE TABLE jx_admin(
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(30) NOT NULL DEFAULT '' COMMENT '用户名',
password char(32) NOT NULL DEFAULT '' COMMENT '密码',
PRIMARY KEY(id)
)ENGINE= InnoDB DEFAULT CHARSET=utf8;
2.2、角色表CREATE TABLE jx_role(
id int(11) NOT NULL AUTO_INCREMENT,
role_name varchar(30) NOT NULL DEFAULT '' COMMENT '角色名称',
PRIMARY KEY(id)
)ENGINE= InnoDB DEFAULT CHARSET=utf8;
2.3、用户角色的中间表CREATE TABLE jx_admin_role(
id int(11) NOT NULL AUTO_INCREMENT,
admin_id int(11) NOT NULL DEFAULT 0 COMMENT '用户ID',
role_id int(11) NOT NULL DEFAULT 0 COMMENT '角色ID',
PRIMARY KEY(id)
)ENGINE= InnoDB DEFAULT CHARSET=utf8;
2.4、权限表CREATE TABLE jx_rule(
id int(11) NOT NULL AUTO_INCREMENT,
rule_name varchar(30) NOT NULL DEFAULT '' COMMENT '权限名称',
module_name varchar(30) NOT NULL DEFAULT '' COMMENT '模型名称',
controller_name varchar(30) NOT NULL DEFAULT '' COMMENT '控制器名称',
action_name varchar(30) NOT NULL DEFAULT '' COMMENT '方法名称',
parent_id int(11) not NULL DEFAULT 0 COMMENT '上级权限ID 0表示顶级权限',
is_show tinyint(1) not NULL DEFAULT 1 COMMENT '是否导航菜单显示1 显示 0 不显示',
PRIMARY KEY(id)
)ENGINE= InnoDB DEFAULT CHARSET=utf8;
2.5、角色权限中间表CREATE TABLE jx_role_rule(
id int(11) NOT NULL AUTO_INCREMENT,
role_id int(11) NOT NULL DEFAULT 0 COMMENT '角色ID',
rule_id int(11) NOT NULL DEFAULT 0 COMMENT '权限ID',
PRIMARY KEY(id)
)ENGINE= InnoDB DEFAULT CHARSET=utf8;
三、角色管理3.1、角色的添加①创建控制器方法加载模板
②创建角色对应的视图目录
③从视图中category目录下复制添加模板
④修改添加模板
⑤创建角色模型
⑥实现接受数据入库
3.2、角色列表显示①控制器中增加方法获取数据并且赋值给模板进行显示
②在模型中实现listData方法获取数据
③对商品的列表模板进行拷贝
④修改列表模板
3.3、角色的删除①修改角色列表中的删除链接
②在控制器中实现dels方法进行删除
③在模型中实现删除
3.4、角色编辑
3.4.1、显示出编辑的角色信息①修改角色列表的编辑连接
②在控制器中实现edit方法获取数据并且显示模板
③模板处理
3.4.2、实现编辑的入库
四、管理员管理功能
4.1、管理员添加功能①创建控制器方法显示出添加页面
②复制视图中的role 改名为admin
③修改添加的模板
④修改控制器实现接受数据入库
⑤创建管理员模型
4.2、管理员列表显示①控制器中增加方法获取数据并且赋值给模板进行显示
②在模型中实现listData
③视图处理
4.3、管理员删除①创建dels方法实现删除管理员
②在模型中实现remove方法进行删除
4.4、管理员编辑
4.4.1、显示编辑的表单①创建控制器方法加载修改的模板
②在模型中实现findOne方法获取数据
③ 模板处理
4.4.2、实现管理员修改信息入库①控制器接受数据调用模型入库修改
②在模型中实现update方法实现修改
五、权限管理
5.1、权限添加①将分类的控制器复制改名为权限对应的控制器
②修改rule控制器add方法
③将分类的模型进行复制
④修改Rule模型
⑤复制分类的视图
⑥修改add模板
5.2、权限的列表功能①修改控制器中的index方法
②处理视图
5.3、权限的删除功能①修改控制器中dels方法
5.4、权限的编辑①修改编辑的edit方法
②视图处理
6、为角色分配权限
6.1、显示出所有的权限信息①在角色列表增加权限赋予的连接地址
②在控制器中实现disfetch方法获取数据并且显示模板
③复制模板
④修改模板
6.2、实现权限分配的入库①修改选择框对应的value值
②修改模板增加隐藏域
③在控制器中接受数据入库
④创建模型方法实现数据入库
6.3、分配权限完善①在控制器中调用模型获取已有的权限
②在模型中实现getRules方法获取权限信息
③将权限信息格式化为一维数组
④在模板中进行判断
7、权限认证
7.1、分析权限认证如何实现1、实现管理员能够登录到后台(当用户登录成功之后可以使用cookie记录用户的状态)
2、针对所有的控制器下的方法都进行判断是否已经登录(在公共控制器中的构造方法中对cookie数据进行)
3、对所有的方法都判断当前用户是否具备访问的权限
首先获取得到当前用户对应的角色信息如果是默认的超级管理员组不进行权限认证。否则需要对权限进行认证
1、超机管理员直接忽略权限认证
2、普通管理员,通过普通管理员所对应的角色信息获取拥有的权限信息。将从数据库中获取到的权限信息的二维数组按照格式将模型、控制器、方法组合成一个一维数组。在根据当前请求的URL地址将当前的模型、控制器、方法组合成为一个字符串。在于一维数组进行比较。如果存在说明有权限访问。否则无权访问
4、实现根据不同的管理员显示出不同的导航菜单
1、对于超级管理员获取所有的权限信息
2、对于普通管理。获取角色所对应的权限信息
3、将权限信息赋值给模板。由模板进行显示
7.2、实现管理员登录7.2.1、显示登录界面①创建控制器方法显示模板
②拷贝登录模板
③修改模板
7.2.2、实现验证码的显示①先创建方法生成验证码
②修改登录模板使用验证码
③实现验证码图片点击切换
7.2.3、实现后台登录操作①控制器接受数据调用模型登录
②在模型中实现用户名及密码的比对
7.2.4、解决用户直接输入URL地址翻墙①修改公共控制器增加判断
②修改Login控制器
实现权限认证①增加属性保存信息
②根据用户信息获取对应的角色信息
③根据角色ID获取对应的权限信息
④将权限的信息格式化一维数组进行保存
⑤对当前访问的方法进行判断是否有权
众览群雄,唯我杭城独秀—一贴汇总杭州校区所有就业薪资
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |