ThinkPHP0122.docx
- 文档编号:9791898
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:12
- 大小:281.47KB
ThinkPHP0122.docx
《ThinkPHP0122.docx》由会员分享,可在线阅读,更多相关《ThinkPHP0122.docx(12页珍藏版)》请在冰豆网上搜索。
ThinkPHP0122
2014-1-22昨天内容回顾
1.命名空间(简单使用、子空间、引入、公共空间、注意)
a)命名空间可以使用同一个应用里边存在多个名字一样的元素
b)元素:
类名、函数名、常量(const)
c)namespaceuseas
d)简单使用
e)namespace命名空间的名字(同一个页面可以有好多namespace)
f)子空间
g)namespacebeijing\chaoyang\jiuxianqiao;
h)命名空间引入(use)
i)默认获得最接近的命名空间的元素,如果没有找到就到引入命名空间获得元素
j)两种方式引入:
k)①空间和元素一并引入
l)usebeijing\chaoyang\jiuxianqiao\getName;
m)echogetName();
n)②只引入空间
o)usebeijing\chaoyang\jiuxianqiao;
p)echojiuxianqiao\getName();
q)公共空间
r)当前脚本没有namespace关键字声明,那么当前脚本文件的元素都是公共空间的元素(即使这个脚本被别人的文件include使用,它在那个文件中元素也是被当作公共空间元素使用)
s)使用公共空间元素:
\元素名字;
t)注意:
u)①命名空间针对的元素:
类名、函数名、常量名字(const)
v)②脚本里边第一个namespace关键字前边不能有任何代码
2.多语言支持
a)启动一个行为Behavior
b)声明:
ThinkPHP/Conf/mode/common.phptags
c)当前应用定义文件:
shop/Common/Conf/tags.php
d)4种多语言支持
3.验证码生成及验证使用
a)Think\Verify.class.php
b)newThink\Verify(array(长度、宽度、字体));
c)funcitonentry()生成验证码
d)functioncheck(用户输入的验证码)
e)有一个具体的单一方法专门生成验证码Manager/verifyImg;
f)
4.登录系统
a)在UserModel模型里边有一个具体方法专门负责校验用户名和密码
b)session(name,value);
c)session(name);
d)session(name,null);
e)session(null);
5.分页效果实现
a)如何把自定义类引入到当前框架使用
b)shop/Component/Page.class.phpnamespaceComponent
c)new\Component\Page();
d)shop/XXXX/具体类.class.phpnamespaceXXXX
e)new\XXXX\具体类;
6.缓存应用
a)file文件缓存
b)S(name,value,time)设置
c)S(name)获得
d)S(name,null)删除
7.图片上传及缩略图
a)Think\Upload.class.php
b)uploadOne($_FILES[xxx]);
c)注意:
根目录(./public/)参数设置正确,否则不允许上传
d)Think\Image.class.php
e)open()打开指定文件
f)thumb()生成缩略图
g)save()把缩略图保存在指定的目录
【rbac】
rolebaseaccess基于角色的访问权限控制(网站后台)
传统权限划分:
为具体的员工分配具体的权限
新来的员工:
把具体的权限依次赋予
辞职的员工:
把具体权限通过点击复选框(不选中)依次取消
老员工调整权限:
通过点击复选框把具体权限给设置或取消掉
以上权限操作非常具体,非常繁琐,还由于没有标准,导致权限会不断变化。
新的流行管理方案:
对角色进行权限划分
员工直接面对角色、角色直接面对具体操作权限
新员工入职只需要确定其角色,他的权限就由角色来确定
员工-------------角色--------------操作权限
现在权限分配非常容易,也非常科学
新员工入职公司只需要把其角色划分好,它的权限有角色确定
sw_manager后台用户管理员表
sw_role角色表
sw_auth具体权限表
1.数据模拟
2.
通过已经模拟好的数据进行相关程序开发
a)用户登录系统,左边显示权限按钮会根据具体角色显示
b)在左边(Admin/Index/left)显示对应的权限信息
i.用户登录系统显示权限信息$_SESSION[‘mg_id’]
ii.根据session信息获得角色role_id信息
iii.根据角色id信息获得权限列表ids信息
iv.根据权限ids信息查询具体权限信息进而显示
3.超级管理员不要进行权限控制admin
a)在Index/left方法里边判断当前用户如果是admin,就显示全部的权限
具体代码:
目前有一个问题:
虽然给用户及角色分配了权限,也实现对应的权限的显示
但是用户可以通过显示修改url地址达到访问其他权限的目的
解决:
每次用户访问的控制器和方法都需要和对应的角色里边的ac信息进行比较
ac信息里边存在这个控制器和方法就允许访问,否则禁止访问
技术角度:
在每个控制器被实例化执行的同时就判断当前的控制器和方法是否允许角色访问
为了程序维护方便,给普通控制器制作父类控制器,在父类控制器的构造方法里边做控制器和方法的过滤工作。
1.
给普通控制器定义父类Component/AdminController.class.php
引入普通控制器父类AdminController
AdminController里边具体内容
普通控制器引入新的父类AdminController
2.在新父类控制器AdminController里边实现每次访问控制器和操作方法过滤
a)具体限制分三种情况
i.自定义方法不进行权限限制(Index/headleftrightManager/login)
ii.系统管理员也不进行权限限制
iii.当前用户允许访问的权限就是角色对应的权限
3.在权限按钮显示对应的控制器和操作方法的url地址
总结:
1.数据模拟(权限、角色、管理员)
2.在后台左边功能按钮处根据不同的人员的session信息获取不同的权限进行显示
3.给系统控制器制作了一个父类AdminControllernamespaceComponent
4.在父类控制器的构造方法里边进行权限过滤
CONTROLLER_NAMEACTION_NAME
维护三部分数据:
权限、角色、管理员
角色:
显示角色列表信息、给角色分配权限
【角色维护】
Admin/Role/showlist显示角色信息
把许多复选框的权限表单的信息收集起来保存到角色的数据表中
在设置权限的时候,把已经有的权限给显示出来(复选框有被选中)
当前角色知道,当前角色对应的权限ids也知道,也可以把ids由字符串变为数组
遍历权限的时候把id与ids的数组做比较,判断是否是其中的一个元素,进而设置checked属性in_array()
1.制作表单显示具体被分配权限信息
2.收集权限信息在RoleModel模型里边保存
3.分配权限时候,已经有的权限,复选框需要被选中
4.展示分配权限信息的表单对应控制器部分:
【权限维护】
展示、添加权限
AuthController
functionshowlist()
functionadd()
1.展示权限信息,及名字设置缩进关系字样
2.添加权限
3.优化
①添加权限父级只显示level=0或level=1
getInfo传递不同参数,获得的信息也略有差异
②为角色分配权限,显示三级权限
【管理员列表实现】
Manager/showlist
总结:
1.通过角色分配权限维护
2.维护权限数据,添加权限
a)auth_path
b)帮组我们对数据进行排序显示
c)全路径:
父级的全路径和本身id结合的信息
d)auth_level
e)基本:
3.维护管理员数据,角色信息({html_options})
作业:
rbac权限控制的三个环节实现(角色、权限、管理员)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ThinkPHP0122