HTML代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css"> </head> <body> <div style="width: 300px"> <div class="form-group"> <label for="name">名称</label> <input type="text" class="form-control account" name="account" > </div> <div class="form-group"> <label for="name">密码</label> <input type="password" class="form-control password" name="password" > </div> <input type="hidden" name="__token__" value="{$Request.token}" /> <input type="button" id="login" value="立即登录"> </div> </body> </html> <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> </script> <script> $(‘#login‘).click(function (){ var account =$(‘.account‘).val(); var password=$(‘.password‘).val(); $.ajax({ url:‘/ajax/login/loginSuccess‘, type:‘POST‘, data:{ account:account, password:password, __token__:"{$Request.token}", }, dataType:‘json‘, success:function (res){ console.log(res.data.token); if (res.code==500){ alert(‘账号错误‘) return false } if (res.code==501){ alert(‘密码错误‘) } if (res.code==200){ alert(‘登录成功‘); //将用户res里的Token存入在本地 localStorage.setItem(‘token‘,res.data.token); location.href=‘/ajax/ajax/index?token=‘+res.data.token; } } }) }) </script>
控制器代码:
<?php namespace app\ajax\controller; use app\ajax\model\AjaxModel; use think\Controller; use think\Session; use tools\jwt\Token; class Login extends Controller { //展示登录页面 public function login() { return view(); } public function loginSuccess() { $params = $this->request->post(); //验证user表是否与用户输入的信息向匹配 $data = AjaxModel::getLogininfo($params); if ($params[‘account‘] != $data[‘username‘]) { return getJsonData(500,‘no‘,‘‘); } if ($params[‘password‘] != $data[‘userpassword‘]) { return getJsonData(501,‘no‘,‘‘); } //生成token令牌 $token = Token::createToken($data[‘id‘]); //将令牌放在session中 $data[‘token‘] = $token; Session::set(‘token‘, $token); //查看用户权限 $node = AjaxModel::getUserNodeALL($data[‘id‘]); //模型层级完成后将数据记录到session中 Session::set(‘node‘, $node); return getJsonData(200, ‘success‘, $data); } }
模型代码:
<?php namespace app\ajax\model; use think\Model; class AjaxModel extends Model { //查询login用户表 protected $table = ‘user‘; public static function getLogininfo($params) { return self::where(‘username‘, $params[‘account‘]) ->find(); } //查询用户对应的权限 public static function getUserNodeALL($id) { //进行关联 $field = ‘user.username,role.role_name,node.*‘; $userNode=self::field($field) ->join(‘user_role‘, ‘user.id=user_role.uid‘) ->join(‘role‘, ‘user_role.rid=role.id‘) ->join(‘role_node‘, ‘role.id=role_node.rid‘) ->join(‘node‘, ‘role_node.nid=node.id‘) ->where(‘user.id‘, $id) ->select(); return self::getTree($userNode,0); } //展示层级权限 public static function getTree($data,$pid=0) { //定义一个空的权限数组 $result=[]; if (empty($data)){ return $result; } foreach ($data as $k=>$v){ if ($v[‘pid‘]==$pid){//找父级 ,数据库pid=0;对应的分别是id=5,id=8; $v[‘child‘]=self::getTree($data,$v[‘id‘]); //id=5,id=8; $result[]=$v; } } return $result; } }
权限5表:
1.用户表user:
2.用户角色关联表user_role:
3:角色表role:
4:角色权限表role_node:
5:权限表 node :
5张表的关系图解
七张表关系图
sql语句:
sql语句:
SELECT
*
FROM
`user`
JOIN user_role ON `user`.id = user_role.uid
join role on role.id = user_role.rid
JOIN role_node on role_node.rid = role.id
JOIN node on node.id = role_node.nid
where `user`.id =3