Thinkphp Rbac应用篇二

最近因为很多事情都没有做完一直没好意思更新,今天趁着天亮前的空档索性更新一下好了,内容很基础,就是RBAC的实际应用,如果不熟悉的可以看一下上篇。Rbac不完全深入详解

我们在前期的时候知道了rbac的认证流程,其实下面要写代码的话也是依照这个认证流程来的,下面继续来看,翻看Controller.class代码的时候发现这么一行
继续阅读

发表在 php | 标签为 , , , , , | 2条评论

有关网站后台密码防御问题

看到了越来越多的网站被黑客或是通过sql注入或是通过其他途径获取到了加密后的密码,发现一个问题就是很多人加密通常只会使用md5这一个函数,打个比方,大部分人的登陆验证可能都是这么写的。(这只是一个例子,通过get获取敏感参数是不正确的)
继续阅读

发表在 php, php security | 标签为 , , | 一条评论

Thinkphp Rbac不完全深入详解一

说到thinkphp rbac就得先说一下rbac, 那么什么是rbac?  rbac即(role based access control)就是基于角色的访问控制的意思。那么什么是基于角色的访问控制?还是跟上面一样,要想知道什么是基于角色的访问控制首先就得来理解什么是角色,那么,什么是角色? 角色,它是一种代称,可以代指某一种或者多种可视和非可视规则和不规则物,简单举例来说,我在家是儿子,而这个儿子就可以称为是一种角色,因为此时角色属于儿子,所以我便可以行使一些儿子可以拥有的权限,假如这个时候我8岁的话,便可以让长辈代替我穿衣,或者喂我吃饭。而这个儿子只是我拥有角色之一,我可以同时拥有多种角色,而每一种角色会拥有若干权限,我可以根据不同的角色限制不同的用户访问,而这个限制的行为就叫做基于角色的访问控制。 继续阅读

发表在 php, thinkphp | 标签为 , , , , | 2条评论

Thinkphp Rbac 一

rbac指的是基于角色的访问控制,就是通过权限表与用户组进行关联以达到权限认证的目的,thinkphp rbac是它对rbac的一个封装,可以不需要写过多的代码完成这个功能。

Thinkphp Rbac的认证原理是这样的:

1.判断当前模块的当前操作是否需要认证,如果需要认证未登录就跳转到认证网关获取决策访问列表,如果不需要认证未登录就检测是否有访问权限。

我们可以从Tp的源码中观察到,它是通过saveAccessList获取用户的权限列表,并保存到session中。

 //用于检测用户权限的方法,并保存到Session中
    static function saveAccessList($authId=null) {
        if(null===$authId)   $authId = $_SESSION[C('USER_AUTH_KEY')];
        // 如果使用普通权限模式,保存当前用户的访问权限列表
        // 对管理员开发所有权限
        if(C('USER_AUTH_TYPE') !=2 && !$_SESSION[C('ADMIN_AUTH_KEY')] )
            $_SESSION['_ACCESS_LIST']   =   self::getAccessList($authId);
        return ;
    }

首先定义了一个静态方法, 然后判断session中是否存在标记名,如果获取到了,就继续判断认证类型,并且没有在配置中发现管理认证标记,就通过getAccessList获取,最后使用return返回获取的信息。格式类似这样的。
继续阅读

发表在 thinkphp | 标签为 , , , | Thinkphp Rbac 一已关闭评论

某站会员提交漏洞被抓的事情

今天刚刚听说,其实不管怎么提交,使用什么方式提交,都是属于非法的,也不管哪些网站有什么背景,跟什么人对接。只要刑十没针对此处做专项修改,他就是违法。但是啊,有句老话说的好, 中国的法律有一个好处,就是讲究人情的,考虑到人已经被逮捕,假设并没有主观故意,恶意行为,脱的数据只是作为漏洞验证,没有出售,传播,他的结果应该是2年以内+缓并处罚金或者不处罚金。 其实小弟我感觉,黑别人网站,浪费大把的时间去验证所谓的漏洞,并不能学到什么技术,只会容易带来麻烦给自己,真对计算机热爱就努力去研究自己的领域,争取能有一个好的发展,而不是以炫耀和贬低他人为乐。

看到有人说,世纪佳缘被脱跟白帽没关系。

执法人员在证据未确凿的情况下,一般是不会执行逮捕的。

发表在 Uncategorized | 某站会员提交漏洞被抓的事情已关闭评论

菜单项添加流程

添加菜单项前,要知道上级菜单项的id和path,所以在添加的form表单里,就要给一个hidden用来获取上级菜单的id, 点提交后,首先实例化模型类,实例化模型类过程中就会把通过POST获取到的pid里的id带入getById查询出对应的信息后再按照格式返回,这个时候就自动得到了上级的path,通过表单创建数据-添加。

发表在 thinkphp | 标签为 | 菜单项添加流程已关闭评论

菜单的无限分类2分层原理

通过查询和order排序后, 再把数据分配到模板中,这个时候再回到模板页查看是不会有层级感的, 因为做的是菜单-子菜单这样的结构,所以为了区分,就要重新写一个功能, 因为子菜单的path是主菜单的path+id, 比如count(array(0,1))-1 说明这个就为主菜单下的一级子菜单项, 如果想要排序, 可以乘以一个偶数, (奇数没法取确定值),比如我是一级菜单,就为1*20=20,二级就为2*20-40,一种类型存一个索引。
继续阅读

发表在 thinkphp | 标签为 , , | 菜单的无限分类2分层原理已关闭评论

菜单的无限级分类

菜单项属于菜单,菜单被模块调用,菜单项中又可以分为子菜单项, 这样一直无限级分, 比如

1 首页 0 0
2 新闻 0 0
3 国内新闻 2 0-2
4 国际新闻 2 0-2
5 民生 3 0-2-3
6 城市周边 3 0-2-3-5
7 国际要闻 0-2-4

首页和新闻都是属于一级分类, 所以所属id和path都为0, 国内新闻是新闻的子菜单项, 所以所属id就为2, path就为0-2, 民生是属于国内新闻的, 所以id就为3, path就为0-2-3, 从这里就可以知道了, 子项的path, 等于父菜单的path+id。 比如城市周边是属于国内新闻下的民生, (0-2-3),那么城市周边的path就为0-2-3-5(民生path+id)。

如果要添加菜单项, 就要先获取菜单项的所属id是什么,这里可以通过获取表单传过来的父id, 然后调用getById把父id作为条件查出父id的id和path, 然后用path连接id就为当前的path, 如果父id的id和path都为0, 说明是主菜单, 直接返回就可以了, 回到前台, 再通过filed生成concat语句通过连接后的字符串和所属id排序, 就完成了菜单级别分类。

发表在 thinkphp | 标签为 , , , | 菜单的无限级分类已关闭评论

thinkphp中的关联模型

thinkphp中的关联模型其实就是thinkphp自己实现的数据库关联查询功能,主要是为了方便解决CURD多关联业务操作的, 它和视图模型类似,但不完全一样, 视图模型是通过操作映射字段查询生成虚拟的表结构,关联模型里的结构真实存在。通常说的关联关系有以下几种。 继续阅读

发表在 thinkphp | 标签为 , , , | thinkphp中的关联模型已关闭评论

thinkphp中的视图模型

thinkphp中也实现了视图, 它是用模型类来定义的, 视图其实就是数据库视图, 它是一张虚拟的表, 表(视图)本身不存在于数据中, 而是根据映射字段查询时自动生成, 主要是被用来解决关联查询或者说筛选的。

在thinkphp3.2.3中, 可以在模型Model和表名中间加View来表示这是一个视图模型, 然后引入Model下的ViewModel再创建一个继承自系统视图的自定义视图模型, 然后可以重写$viewFields属性, 它提供的是一个多维数组, 你可以通过array(‘表名’=>array(‘字段名’))的形式设置视图模型, 如果存在多表, 就要给重名的定义别名, 然后通过_on定义关联查询条件, 视图模型算基本定义完成。 回到对应的控制器里, 实例化自定义视图模型, 然后查出, 就可以了。
继续阅读

发表在 thinkphp | 标签为 , , , , , | thinkphp中的视图模型已关闭评论