山西网站建设适合v加xtdseo,asp做网站和dw的区别,live writer wordpress,wordpress企业站模板下载出现场景: 1. 没有登录#xff0c;也能访问网页
2. 没有相关权限#xff0c;也能访问对应的控制器和方法 解决方案: 定义一个CommonController,其他控制器继承CommonController,在CommonController中定义初始化方法_initialize
注:这里用的是tp3.2框架,如果我们直接在Commo…出现场景: 1. 没有登录也能访问网页
2. 没有相关权限也能访问对应的控制器和方法 解决方案: 定义一个CommonController,其他控制器继承CommonController,在CommonController中定义初始化方法_initialize
注:这里用的是tp3.2框架,如果我们直接在CommonController中定义__constrct构造方法,会造成重写Controller,所以我们直接使用_initialize方法(_initialize方法是tp框架的初始化方法) 注:也可以parent::__construct();[tp框架中推荐用_initalize方法,如果是其他框架或是原生,可以用parent::__construct()] 具体实施: 1. 解决没有登录也可以访问网页 ?php
namespace Home\Controller;
use Think\Controller;
class CommonController extends Controller {Public function _initialize(){// 初始化的时候检查用户权限if(!isset($_SESSION[username]) || $_SESSION[username]){$this-redirect(Login/login);}}
}
?
核心思想: 判断是否有session 2. 解决没有相关权限也能访问对应的控制器和方法 核心思想:
(1) 从session中获取当前访问的角色id role_id
(2) 根据role_id从role表中查询role_auth_path的值(role_auth_path记录了当前角色所有能够访问的控制器-方法字符串)
(3) 获取当前访问的控制器-方法字符串,和当前角色的role_auth_path进行比较,如果当前访问的控制器-方法在role_auth_path中,则让其正常访问, 如果不在,则说明当前角色不具有访问权限,为跳墙访问
数据表地址: http://blog.csdn.net/m_nanle_xiaobudiu/article/details/79443389 具体实施: ?php
namespace Home\Controller;
use Think\Controller;class CommonController extends Controller{function _initialize(){//检测sessionif(!session(?id)){$this-error(您尚未登录请登录后再访问, U(Index/login));}//获取当前访问的控制器-方法$now_path CONTROLLER_NAME.-.ACTION_NAME;//获取session中的roleid从role表中获取role_auth_path$role_id session(role_id);$role_info D(Role)-field(role_auth_path)-find($role_id);$role_auth_path $role_info[role_auth_path];//将 role_auth_path 转为数组$role_auth_path explode(,, $role_auth_path);//判断$now_path是否在$role_auth_path中if(!in_array($now_path, $role_auth_path)){//如果不存在则为跳墙访问跳转回登录页$this-error(您无权访问该模块,请重新登录再访问, U(Index/login), 3);}}
}备注:
为角色分配权限 html部分: 角色列表页面roleList.html table theadtrthinput name typecheckbox value idcheckAll //thth编号/thth角色名/thth权限ids/thth权限路径/thth操作/th/tr/theadtbodyforeach namerole_list itemvotrtdinput name typecheckbox value //tdtd{$vo.role_id}/tdtd{$vo.role_name}/tdtd{$vo.role_auth_ids}/tdtd{$vo.role_auth_path}/tdtda href{:U(distribute, role_id.$vo[role_id])} classtablelink分配权限/a a href# classtablelink 删除/a/td/tr/foreach/tbody
/table 权限列表 distribute.html html
headmeta http-equivContent-Type contenttext/html; charsetutf-8 /title无标题文档/titlescript languageJavaScript src__ADMIN__/js/jquery.js/script
/headbodydivform action methodpostinput typehidden namerole_id value{$Think.get.role_id} /您正在给【label stylecolor: red;font-weight: bolder;{$role_info.role_name}/label】设置权限ultabletheadtrth权限分类/thth权限/th/tr/theadtbodyforeach nameauth_p itemvotrtdin namevo.auth_id value$role_info.role_auth_idsinput typecheckbox nameauth_id[] value{$vo.auth_id} checkedchecked /else /input typecheckbox nameauth_id[] value{$vo.auth_id} //in{$vo.auth_name}/tdtdforeach nameauth_s itemvif condition$v.auth_pid eq $vo.auth_id input typecheckbox nameauth_id[] value{$v.auth_id}in namev.auth_id value$role_info.role_auth_idscheckedchecked/in{$v.auth_name}emsp;/if/foreach/td/tr/foreach/tbody/tablebr/lilabelnbsp;/labelinput name idbtnSubmit typebutton classbtn value确认保存 //li/ul/form/div
/bodyscript typetext/javascript
$(function(){//给btnsubmit绑定点击事件$(#btnSubmit).on(click,function(){//表单提交$(form).submit();})
});
/script
/htmlphp部分: 对应的方法: ?php
function distribute(){$role_model D(Role);if(IS_POST){//1. 接收role_id的值$role_id I(post.role_id);//1. 接收表单数据$ids I(post.auth_id);//dump($ids);//2. 将数组转为字符串$ids implode(,, $ids);//3. 根据ids从auth表中查询数据拼接role_auth_path需要数据$auth_list D(Auth)-where(auth_id in ($ids))-select();//dump($auth_list);die;$role_auth_path ;foreach($auth_list as $value){if($value[auth_c] ! ){$role_auth_path . $value[auth_c].-.$value[auth_a].,;}}//去掉最后一个 ,$role_auth_path rtrim($role_auth_path, ,);//4. 构造修改数据$save_data array(role_id $role_id,role_auth_ids $ids,role_auth_path $role_auth_path);if($role_model-save($save_data)){$this-success(分配权限成功, U(roleList), 3);} else {$this-error(分配权限失败, U(roleList), 3);}} else {//1.接收角色id$role_id I(get.role_id);//2. 根据角色id查询角色信息$role_info $role_model-find($role_id);//3. 分配到模板$this-assign(role_info, $role_info);//4. 分一二级读取auth表中的权限信息$auth_model D(Auth);$auth_p $auth_model-where(auth_pid0)-select();$auth_s $auth_model-where(auth_pid!0)-select();$this-assign(auth_p, $auth_p);$this-assign(auth_s, $auth_s);$this-display();}}?