public function run(&$params) { //Behavior的行为是在加载控制器之前,也包含了登录页面的控制器和验证码,所以要先排除掉; //>>1.定义不验证的控制器和方法 $notInclude = array('Login/checkLogin', 'Verify/index'); //定义当前访问的控制器和方法 $ongoing = CONTROLLER_NAME . '/' . ACTION_NAME; if (in_array($ongoing, $notInclude)) { return false; } //判断用户是否登录 if (!isLogin()) { $LoginService = D('Login', 'Service'); //判断用户是否自动登录 if (!$LoginService->autoLogin()) { redirect(U('Login/checkLogin'), 1, '请登录'); } } if (superUser()) { return false; } //得到当前用户的权限 $userUrl = savePermissionURL(); if (!in_array($ongoing, $userUrl)) { echo "权限不足"; exit; } }
public function run(&$params) { //>>1.定义不需要登陆验证的地址 $noCheck = array('Login/index', 'Verify/index'); //>>2.获取用户正在访问的url地址 $requestURL = CONTROLLER_NAME . '/' . ACTION_NAME; if (in_array($requestURL, $noCheck)) { return; } header('Content-Type: text/html;charset=utf-8'); //>>1.判定用户是否登陆 if (!isLogin()) { $loginService = D('Login', 'Service'); if (!$loginService->autoLogin()) { //进行自动登录, 如果没有自动登录,就转向登录页面 redirect(U('Login/index'), 1, '请登陆!'); } } //>>3.如果是超级管理员不用在判定权限 if (isSuperUser()) { return; } //>>2.判定登陆用户访问的url是否在他的权限范围之内 $urls = savePermissionURL(); if (!in_array($requestURL, $urls)) { exit('权限不足!请求联系管理员!'); } }
public function checkLogin() { // session_start(); // $redis = new \Redis(); // $redis->connect('127.0.0.1', 6379); // $key = $redis->keys('*'); // du($redis->get($key[1])); // exit; if (IS_POST) { //>>先进行验证码的验证 /* $captcha = I('post.captcha'); $verify = new Verify(); if(!$verify->check($captcha)){ $this->error('验证码错误'); }*/ //>>1.接收请求参数; $username = I('post.username'); $password = I('post.password'); //>>2.通过用户名查询数据库看是否存在此用户名 $loginService = D('Login', 'Service'); //调用方法执行数据库查询 $result = $loginService->loginData($username, $password); if (is_array($result)) { //登录成功就保存用户名到session中 //把session的设置成函数 login($result); //等到url地址保存在session $resultUrl = $loginService->userPermisson($result['id']); //把保存到session中封装成一个函数 savePermissionURL(array_column($resultUrl, 'url')); savePermissionID(array_column($resultUrl, 'id')); //当remember存在的时候就保存 $remember = I('post.remember'); if ($remember) { //存在就保存数据到cookie $loginService->saveService($result['id']); } $this->success('登陆成功!', U('Index/index')); } else { $this->error($result); } } else { $this->display('login'); } }
public function index() { if (IS_POST) { //验证码验证 // $captcha = I('post.captcha'); // $verifyModel = new Verify(); // if ($verifyModel->check($captcha) === flase) { // $this->error('验证码错误!'); // } //验证用户名和密码 //>>1.接收请求参数 $username = I('post.username'); $password = I('post.password'); //>>2.再进行验证登陆 $loginService = D('Login', 'Service'); //根据用户名和密码进行验证 $result = $loginService->login($username, $password); if (is_array($result)) { //是数组, 表示用户信息 //登陆成功,将用户信息保存到session中 login($result); //需要将当前用户能够访问的url地址保存到session中 $permissions = $loginService->getPermissions($result['id']); savePermissionURL($permissions['urls']); savePermissionID($permissions['ids']); //完成自动登录信息的保存 $remember = I('post.remember'); if (!empty($remember)) { //保存用户信息,saveAutoLogin(传入用户ID) $loginService->saveAutoLogin($result['id']); } header('Content-Type: text/html;charset=utf-8'); $this->success('登陆成功!', U('Index/index')); } else { //如果不是数组, 就是错误信息 $this->error($result); } } else { $this->display('login'); } }
/** * 自动登录的方法 , 就是根据cookie中值进行登录 * 1. 登录失败: 返回false * 2. 登录成功: 返回true */ public function autoLogin() { //>>1.得到cookie中信息 $admin_id = cookie('admin_id'); $auto_key = cookie('auto_key'); //如果没有cookie的值就需要自动登录 if (empty($admin_id) || empty($auto_key)) { return false; } //>>2.根据cookie中的admin_id,查找是否有该用户 $adminModel = M('Admin'); $row = $adminModel->getById($admin_id); if ($row) { //>>3.如果有用户再比 加密后的auto_key if ($auto_key == md5($row['auto_key'] . $row['salt'])) { //登录成功 login($row); //将当前登陆信息保存到 session中 //根据用户的id 查询出当前用户的权限的url和id,保存到session中 $permissions = $this->getPermissions($row['id']); savePermissionURL($permissions['urls']); //将权限的url地址保存 savePermissionID($permissions['ids']); //将权限的id保存 return true; } else { return false; } } else { return false; } }
public function autoLogin() { //得到cookie的值 $admin_id = cookie('admin_id'); $auto_key = cookie('auto_key'); if (empty($admin_id) || empty($auto_key)) { return false; } //根据admin_id的值来判断的 $adminModel = D('Admin'); $row = $adminModel->getById($admin_id); if ($row === false) { return false; } $key = md5($row['atuo_key'] . $row['salt']); if ($auto_key == $key) { //存在就保存就根据当前的id把url和权限的id保存到seesion login($row); //等到url地址保存在session $resultUrl = $this->userPermisson($admin_id); //把保存到session中封装成一个函数 savePermissionURL(array_column($resultUrl, 'url')); savePermissionID(array_column($resultUrl, 'id')); return true; } else { return false; } }