ThinkPHP学习札记(十九)权限管理的实现方式RBAC
程序员文章站
2024-02-08 23:50:52
...
ThinkPHP学习笔记(十九)权限管理的实现方式RBAC
下面上一下五张表的数据
PublicAction中需要设置的公共访问方法;(命名基于配置中的NOT_AUTH_MODULE的配置)
CommonAction中设置所有url的过滤方法
Public文件夹下的login。html
Action的方法
下面上一下五张表的数据
tb_user:用户表
Role权限组表
role_user:权限组与用户的对应关系表
node表:表示当前项目中url分类,精确到每个方法的控制
access表:表示不同用户组对应的可以访问的不同url分类
config中需要设置的参数:
//设置rbac的参数 'USER_AUTH_ON'=>true, 'USER_AUTH_TYPE' =>1, // 默认认证类型 1 登录认证 2 即使认证 'USER_AUTH_KEY' =>'authId', // 用户认证SESSION标记 'ADMIN_AUTH_KEY' =>'administrator',//管理员标识 'USER_AUTH_MODEL' =>'User', // 默认验证数据表模型 'AUTH_PWD_ENCODER' =>'md5', // 用户认证密码加密方式 'USER_AUTH_GATEWAY' =>'/Public/login', // 默认认证网关 'NOT_AUTH_MODULE' =>'Public', // 默认无需认证模块 'REQUIRE_AUTH_MODULE'=>'', // 默认需要认证模块 'NOT_AUTH_ACTION' =>'', // 默认无需认证操作 'REQUIRE_AUTH_ACTION'=>'', // 默认需要认证操作 'GUEST_AUTH_ON' => false, // 是否开启游客授权访问 'GUEST_AUTH_ID' => 0, // 游客的用户ID(可以在数据库组中设置一个id为0的游客组) 'SHOW_RUN_TIME'=>true, // 运行时间显示 'SHOW_ADV_TIME'=>true, // 显示详细的运行时间 'SHOW_DB_TIMES'=>true, // 显示数据库查询和写入次数 'SHOW_CACHE_TIMES'=>true, // 显示缓存操作次数 'SHOW_USE_MEM'=>true, // 显示内存开销 'DB_LIKE_FIELDS'=>'title|remark', 'RBAC_ROLE_TABLE'=>'think_role', 'RBAC_USER_TABLE' => 'think_role_user', 'RBAC_ACCESS_TABLE' => 'think_access', 'RBAC_NODE_TABLE' => 'think_node',
PublicAction中需要设置的公共访问方法;(命名基于配置中的NOT_AUTH_MODULE的配置)
login(); } public function login(){ $this->display(); } //可以去例子中复制 public function checkLogin(){ if(empty($_POST['username'])) { $this->error('帐号错误!'); }elseif (empty($_POST['password'])){ $this->error('密码必须!'); // }elseif (empty($_POST['verify'])){ // $this->error('验证码必须!'); } //生成认证条件 $map = array(); // 支持使用绑定帐号登录 $map['username'] = $_POST['username']; // $map["status"] = array('gt',0); // if($_SESSION['verify'] != md5($_POST['verify'])) { // $this->error('验证码错误!'); // } import ( 'ORG.Util.RBAC' ); $authInfo = RBAC::authenticate($map); //使用用户名、密码和状态的方式进行认证 if(false === $authInfo) { $this->error('帐号不存在或已禁用!'); }else { if($authInfo['password'] != md5($_POST['password'])) { $this->error('密码错误!'); } $_SESSION[C('USER_AUTH_KEY')] = $authInfo['id']; // $_SESSION['email'] = $authInfo['email']; // $_SESSION['loginUserName'] = $authInfo['nickname']; // $_SESSION['lastLoginTime'] = $authInfo['last_login_time']; // $_SESSION['login_count'] = $authInfo['login_count']; if($authInfo['username']=='admin') { $_SESSION['administrator'] = true; } //保存登录信息 // $User = M('User'); // $ip = get_client_ip(); // $time = time(); // $data = array(); // $data['id'] = $authInfo['id']; // $data['last_login_time'] = $time; // $data['login_count'] = array('exp','login_count+1'); // $data['last_login_ip'] = $ip; // $User->save($data); // 缓存访问权限 RBAC::saveAccessList(); $this->success('登录成功!'); } } //可以去例子中复制 public function loginout(){ if(isset($_SESSION[C('USER_AUTH_KEY')])) { unset($_SESSION[C('USER_AUTH_KEY')]); unset($_SESSION); session_destroy(); $this->assign("jumpUrl",__URL__.'/login/'); $this->success('登出成功!'); }else { $this->error('已经登出!'); } } } ?>
CommonAction中设置所有url的过滤方法
assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) ); } // 提示错误信息 $this->error ( L ( '_VALID_ACCESS_' ) ); } } } } public function verify(){ //导入验证码类 //方式一: import('ORG.Util.Image'); //方式二:@代表当前项目的lib文件夹(需要自己复制或者自己写一个新的类) // import('@.ORG.Image') // Image::buildImageVerify(); //扩展修改 /** * @param string $length 位数 * @param string $mode 类型(0字母,1数字,2大写字母,3小写字母,4中文,5混合) * @param string $type 图像格式 * @param string $width 宽度 * @param string $height 高度 * buildImageVerify($length=4,$mode=1,$type='png',$width=48,$height=22,$verifyName='verify') */ Image::buildImageVerify(5,5,'png',80,22); //中文验证码(2.0会有一个问题:msubstr有错误) //1.修改function::msubstr //2.加入字体ttf需要放入image同级目录之下 //扩展可以去类文件中查看 // Image::GBVerify(); } } ?>
Public文件夹下的login。html
Insert title here
相关文章
相关视频
上一篇: PHP生成PDF有关问题
下一篇: 两个数组中交集的个数是否相等