# AuthWeb权限类使用说明 >[info] 类库源码 https://www.kancloud.cn/mikkle/thinkphp5_study/484707 ### 控制器权限基类Auth调用AuthWeb方法 #### Auth权限检验方法 * 创建模块基类验证基类 * 在构造函数中将权限类注入 ~~~ $this->auth=AuthWeb::instance(); ~~~ * 注入其他常用参数 ~~~ $this->loginUrl = Url::build("center/main/login"); $this->logoutUrl = Url::build("center/main/logout"); $this->indexUrl = Url::build("center/main/index"); $this->mainUrl = Url::build("center/main/main"); ~~~ * 检测是否登陆 ~~~ //检测是否登陆 if(!$this->auth->checkLoginGlobal()) { $this->redirect($this->loginUrl); } ~~~ * 检查节点权限 ~~~ //检查节点权限 if(!$this->auth->checkNodeAuth() === true ){ $this->error($this->auth->getError(),$this->indexUrl); } ~~~ ## 权限类设置登录方法 >[danger] 当用户登陆验证成功后 设置用户的信息即可 ~~~ AuthWeb::instance()->setLoginGlobal($memberInfo); ~~~ ## 权限类用户退出方法 ~~~ public function logout(){ AuthWeb::instance()->logoutGlobal(); return ShowCode::jsonCode(1001); } ~~~ Auth类源码 ~~~ <?php /** * Created by PhpStorm. * User: Mikkle * QQ:776329498 * Date: 2017/11/13 * Time: 15:12 */ namespace app\center\controller\base; use mikkle\tp_auth\AuthWeb; use think\Url; class Auth extends Base { protected $auth; protected $loginUrl; protected $logoutUrl; protected $indexUrl; protected $mainUrl; protected $uuid; protected $adminInfo; public function _initialize() { parent::_initialize(); // TODO: Change the autogenerated stub $this->auth=AuthWeb::instance(); $this->loginUrl = Url::build("center/main/login"); $this->logoutUrl = Url::build("center/main/logout"); $this->indexUrl = Url::build("center/main/index"); $this->mainUrl = Url::build("center/main/main"); //检测是否登陆 if(!$this->auth->checkLoginGlobal()) { $this->redirect($this->loginUrl); } $this->uuid = $this->auth->getUuid(); $this->adminInfo = $this->auth->getAdminInfo(); //检查节点权限 if(!$this->auth->checkNodeAuth() === true ){ $this->error($this->auth->getError(),$this->indexUrl); } $this->assignAuthData(); } /** * @title assignAuthData * @description * @author Mikkle * @param_return name: */ protected function assignAuthData() { $assignAuthData = [ "member_info"=>$this->adminInfo, "login_url" =>$this->loginUrl, "logout_url" =>$this->logoutUrl, "index_url" =>$this->indexUrl, 'main_url' => $this ->mainUrl, ]; $this->assign($assignAuthData); } } ~~~ ## 权限数据表结构参考 ### 管理员表 ~~~ -- ---------------------------- -- Table structure for mk_system_admin -- ---------------------------- DROP TABLE IF EXISTS `mk_system_admin`; CREATE TABLE `mk_system_admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uuid` varchar(50) DEFAULT NULL, `admin_number` varchar(50) DEFAULT NULL COMMENT '管理员编号', `name` varchar(30) DEFAULT NULL COMMENT '用户姓名', `username` varchar(50) DEFAULT NULL COMMENT '用户名称', `password` varchar(80) DEFAULT NULL COMMENT '用户密码', `department_id` varchar(40) DEFAULT NULL COMMENT '所属部门ID', `department_name` varchar(50) DEFAULT NULL COMMENT '部门名称', `jobs_id` varchar(40) DEFAULT NULL COMMENT '所属职位ID', `role_id` varchar(40) DEFAULT NULL COMMENT '所属角色ID', `mobile` varchar(20) DEFAULT NULL COMMENT '用户手机', `desc` varchar(255) DEFAULT NULL, `we_openid` varchar(40) DEFAULT NULL COMMENT '微信的识别码', `status` smallint(6) DEFAULT NULL COMMENT '状态', `create_time` int(11) DEFAULT NULL COMMENT '创建时间', `update_time` int(11) DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='管理员表'; ~~~ ### 菜单节点数据库表 ~~~ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for mk_system_node -- ---------------------------- DROP TABLE IF EXISTS `mk_system_node`; CREATE TABLE `mk_system_node` ( `id` int(11) NOT NULL AUTO_INCREMENT, `guid` varchar(40) DEFAULT NULL, `pid` varchar(40) DEFAULT NULL COMMENT '父ID', `node_name` varchar(50) DEFAULT NULL COMMENT '节点名称', `node_desc` varchar(255) DEFAULT NULL, `module_name` varchar(80) DEFAULT NULL COMMENT '模块名称', `control_name` varchar(80) DEFAULT NULL COMMENT '控制器名称', `action_name` varchar(80) DEFAULT NULL COMMENT '方法名称', `icon` varchar(100) DEFAULT NULL COMMENT '图标', `auth_grade` smallint(6) DEFAULT '1' COMMENT '浏览权限 1 需要登陆 0 不用登陆', `is_menu` smallint(6) DEFAULT '0' COMMENT '是否菜单', `group` varchar(80) DEFAULT NULL COMMENT '节点分组', `sort` smallint(6) DEFAULT '0' COMMENT '节点排序', `status` smallint(6) DEFAULT NULL COMMENT '状态', `create_time` int(11) DEFAULT NULL, `update_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='菜单节点表'; ~~~ ### 角色表 ~~~ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for mk_system_role -- ---------------------------- DROP TABLE IF EXISTS `mk_system_role`; CREATE TABLE `mk_system_role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `guid` varchar(40) DEFAULT NULL, `role_name` varchar(60) DEFAULT NULL COMMENT '角色名称', `role_desc` varchar(80) DEFAULT NULL COMMENT '角色备注', `status` smallint(6) DEFAULT NULL COMMENT '状态', `create_time` int(11) DEFAULT NULL COMMENT '创建时间', `update_time` int(11) DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='角色表'; ~~~ ### 角色节点中间表和管理员角色中间表 ~~~ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for mk_system_role_node_access -- ---------------------------- DROP TABLE IF EXISTS `mk_system_role_node_access`; CREATE TABLE `mk_system_role_node_access` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `role_id` varchar(40) DEFAULT NULL COMMENT '角色ID', `node_id` varchar(40) DEFAULT NULL COMMENT '节点ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='角色节点菜单关系表'; ~~~ >[danger] 当节点较少时 可以管理员和角色一对一对应 即一个管理员只有一个角色 >当管理员和角色采用关系表时候 一个管理员可以使用多个角色 这也是我推荐的方式 ~~~ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for mk_system_admin_role_access -- ---------------------------- DROP TABLE IF EXISTS `mk_system_admin_role_access`; CREATE TABLE `mk_system_admin_role_access` ( `id` int(11) NOT NULL AUTO_INCREMENT, `uuid` varchar(40) DEFAULT NULL COMMENT '管理员ID', `role_id` varchar(40) DEFAULT NULL COMMENT '角色ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='管理员角色关系表'; ~~~