ThinkPHP的rbac例子的流程

/ 0评 / 0

在config.php中,'USER_AUTH_GATEWAY'的默认网关决定了,在用户打开网页的时候,自动会跳转到rbac/Public/login的url。
PublicAction的login()方法会通过!isset($_SESSION[C('USER_AUTH_KEY')])判断用户是否登录。如果没有登录,便显示登录界面。用户可以通过登录界面,输入帐号密码,触发PublicAction的checkLogin()方法。
checkLogin()方法会对$_POST进行生成一个$map,然后丢给RBAC的authenticate($map, $model='')进行查询。在这里需要注意的是C('USER_AUTH_MODEL')是获取config里面的'USER_AUTH_MODEL'字段,这个字段会被赋值给$model。最后用M($model)方法查询$map对应的数据,返回到checkLogin(),对$authInfo赋值。如果$authInfo不为false,便检测password字段,通过后对$_SESSION的各个字段赋值。而后保存完登录信息,再通过RBAC::saveAccessList()方法缓存访问权限。在以上内容都完成后,url跳转到/Index/index,展开一段新的旅途。
新旅途开始的时候,其实是加载了top,menu,drag,main,footer这5个frame来显示后台的信息。下面就对各个frame进行研究:

top

在top()方法中M("Group")会去查询有多少个可以管理的应用,status为1的应用读取其id和title字段。然后到首页上去渲染。

menu

在执行menu()方法的过程中,首先会checkUser()判断是否是登录状态,并且检测$_SESSION(C('USER_AUTH_KEY'))是否有值。菜单选项的生成过程有两种。一种是通过读取缓存,另外一个种是通过数据库生成,通过数据库生成后会保存到缓存之中。

drag

起一个toggleMenu的功能。

main

在main()方法中$info变量将各种信息收集起来,交给前端渲染。

footer

直接渲染模板.

在后续的main的切换过程中,是menu对main的url在进行不断变化来切换界面。
ThinkPHP的rbac例子的大致流程就是这样子的了。