欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

ThinkPHP学习札记(十九)权限管理的实现方式RBAC

程序员文章站 2022-06-10 13:26:21
...
ThinkPHP学习笔记(十九)权限管理的实现方式RBAC


Action的方法


下面上一下五张表的数据

tb_user:用户表

ThinkPHP学习札记(十九)权限管理的实现方式RBAC

Role权限组表

ThinkPHP学习札记(十九)权限管理的实现方式RBAC

role_user:权限组与用户的对应关系表

ThinkPHP学习札记(十九)权限管理的实现方式RBAC

node表:表示当前项目中url分类,精确到每个方法的控制

ThinkPHP学习札记(十九)权限管理的实现方式RBAC

access表:表示不同用户组对应的可以访问的不同url分类

ThinkPHP学习札记(十九)权限管理的实现方式RBAC

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
用户名:
密码:



ThinkPHP学习札记(十九)权限管理的实现方式RBAC

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频