博客列表 >3.【商城后台管理系统】基于TP6开发登陆授权重定向拦截操作及管理员列表操作

3.【商城后台管理系统】基于TP6开发登陆授权重定向拦截操作及管理员列表操作

 一纸荒凉* Armani
 一纸荒凉* Armani原创
2021年06月16日 11:13:171659浏览

【商城后台管理系统】基于TP6开发登陆授权重定向拦截操作及管理员列表渲染

一、登陆授权

我们都知道,前面登陆功能已经做好了,登陆成功以后通过Session将用户信息保存,实现多页面数据交互,后台首页显示有登陆者的用户名和角色名称。

但是问题来了,目前来看,如果我不登录也是照样可以访问后台首页的,且无法获取用户信息进行显示。

这个时候我们就要进行登陆拦截操作,当该页面未检测到用户的Session信息的时候,将进行拦截重定向跳转至登陆页面处理。

  1. // 1.禁止未登录的用户进入系统------
  2. $admin = Session::get('admin');
  3. if(empty($admin)){
  4. // 通过接口请求的拦截
  5. if (Request::isAjax()) {
  6. exit(json_encode(['code'=>1,'msg'=>'您当前还未登陆!!!']));
  7. }
  8. // 显示登陆页面
  9. exit(View::fetch('/account/login'));
  10. }

但是我们不可能对每个控制器中的每一个方法都进行验证操作,这时候就可以用到BaseController类,我们中的我们的控制器都是继承这个基类的,他当中有个初始化方法,会在执行控制器方法之前执行initialize()初始化方法,可以将检测登陆信息拦截放到这个基类的初始化方法中进行。

  1. protected function initialize(){
  2. // 1.禁止未登录的用户进入系统------
  3. $admin = Session::get('admin');
  4. if(empty($admin)){
  5. if (Request::isAjax()) {
  6. exit(json_encode(['code'=>1,'msg'=>'您当前还未登陆!!!']));
  7. }
  8. exit(View::fetch('/account/login'));
  9. }
  10. }

后续需要登陆授权拦截的页面,只需要继承这个基类即可实现拦截操作。这下在未登录的情况下,直接访问后台首页,在初始化的时候,由于没有检测到Session用户信息,直接拦截显示了后台的登陆页面,如果用户信息存在,则不会执行拦截操作。

二、管理员列表

新建控制器 Admin.php 查询出管理员的信息

  1. <?php
  2. namespace app\admin\controller;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. use think\facade\Request;
  6. /**
  7. * 管理员管理
  8. */
  9. class Admin extends Base
  10. {
  11. // 账号列表
  12. public function index(){
  13. /** 方案一:分别取出所有的数据
  14. // 查询出所有管理员用户信息
  15. $data['adminList'] = Db::table('admin')->select()->toArray();
  16. // 查询出所有角色信息
  17. $groupList = Db::table('admin_group')->field(['id','title'])->select()->toArray();
  18. // 循环用户账户信息
  19. foreach ($data['adminList'] as $key => $user) {
  20. // 用于查找存储对应的角色名称默认为空
  21. $data['adminList'][$key]['group_title'] = '';
  22. // 循环角色信息
  23. foreach ($groupList as $value) {
  24. // 判断用户信息的角色gid是否和角色列表的id相等
  25. if($user['gid']==$value['id']){
  26. // 用户列表gid和角色列表id相等,则赋值角色名称
  27. $data['adminList'][$key]['group_title'] = $value['title'];
  28. break;
  29. }
  30. }
  31. }*/
  32. /** 使用join连表查询 */
  33. $data['adminList'] = Db::table('admin a')
  34. ->field('a.*,g.title group_title')
  35. ->join(['admin_group'=>'g'],'a.gid=g.id')
  36. ->order('a.id desc')
  37. ->select();
  38. // 将数据传递给视图层
  39. View::assign([
  40. 'data'=>$data
  41. ]);
  42. // 指定视图名称
  43. return View::fetch('/admin/index');
  44. }
  45. }

新建视图文件 Admin/index.php

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css">
  6. <script type="text/javascript" src="/static/layui/layui.js"></script>
  7. </head>
  8. <body style="padding: 20px;">
  9. <div class="layui-card">
  10. <div class="layui-card-header"><h3>管理员列表</h3></div>
  11. <div class="layui-card-body">
  12. <span class="layui-breadcrumb">
  13. <a>管理账号</a>
  14. <a href="/admin/admin/index"><cite>账号列表</cite></a>
  15. </span>
  16. <button style="float: right;" type="button" class="layui-btn layui-btn-normal layui-btn-radius layui-btn-sm" onclick="add()">
  17. <i class="layui-icon layui-icon-add-1"></i>添加
  18. </button>
  19. <table class="layui-table" >
  20. <thead>
  21. <tr>
  22. <th>ID</th>
  23. <th>用户名</th>
  24. <th>角色</th>
  25. <th>真实姓名</th>
  26. <th>电话</th>
  27. <th>添加时间</th>
  28. <th>登陆时间</th>
  29. <th>状态</th>
  30. <th>操作</th>
  31. </tr>
  32. </thead>
  33. <tbody>
  34. {foreach $data['adminList'] as $user}
  35. <tr>
  36. <td>{$user['id']}</td>
  37. <td>{$user['username']}</td>
  38. <td>{$user['group_title']}</td>
  39. <td>{$user['truename']}</td>
  40. <td>{$user['phone']}</td>
  41. <td>{$user['add_time'] | date='Y-m-d H:i:s'}</td>
  42. <td>{$user['lastlogin'] | date='Y-m-d H:i:s'}</td>
  43. <td>
  44. {if($user['status']==0)}
  45. <span class="layui-badge layui-bg-green"><i class="layui-icon layui-icon-ok-circle"></i>正常</span>
  46. {else if/}
  47. <span class="layui-badge layui-bg-red"><i class="layui-icon layui-icon-close"></i></i>禁用</span>
  48. {/if}
  49. </td>
  50. <td>
  51. <button type="button" class="layui-btn layui-btn-xs" onclick="edit({$user['id']})">
  52. <i class="layui-icon layui-icon-edit"></i>修改
  53. </button>
  54. <button type="button" class="layui-btn layui-btn-xs layui-bg-red" onclick="del({$user['id']})">
  55. <i class="layui-icon layui-icon-delete"></i>删除
  56. </button>
  57. </td>
  58. </tr>
  59. {/foreach}
  60. </tbody>
  61. </table>
  62. </div>
  63. </div>
  64. </body>
  65. </html>

三、管理员修改

Admin.php控制器方法edit

  1. <?php
  2. namespace app\admin\controller;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. use think\facade\Request;
  6. /**
  7. * 管理员管理
  8. */
  9. class Admin extends Base
  10. {
  11. // 账号列表...
  12. // 修改管理员
  13. public function edit(){
  14. if(Request::isPost()){
  15. // 保存修改的用户信息
  16. $data['id'] = input('post.id');
  17. $data['username'] = input('post.username');
  18. $data['gid'] = input('post.gid');
  19. $data['gid'] = input('post.gid');
  20. $data['truename'] = input('post.truename');
  21. $data['phone'] = input('post.phone');
  22. $data['status'] = input('post.status');
  23. $password = input('post.password');
  24. // 判断是否传递了密码即修改密码
  25. if($password){
  26. // 对密码进行加密处理
  27. $data['password'] = password_hash($password,PASSWORD_DEFAULT);
  28. }
  29. // 修改数据
  30. $res = Db::table('admin')->save($data);
  31. // 修改成功
  32. if(empty($res)){
  33. exit(json_encode(array('code'=>1,'msg'=>'修改失败')));
  34. }
  35. exit(json_encode(array('code'=>0,'msg'=>'更新成功')));
  36. }else{
  37. $id = (int)input('get.id');
  38. // 查询用户信息
  39. $data['item'] = Db::table('admin')->where('id',$id)->find();
  40. // 查询角色列表
  41. $data['groupList'] = Db::table('admin_group')->field('id,title')->select();
  42. return view('/admin/edit',$data);
  43. }
  44. }
  45. }

管理员列表视图中修改按钮操作 Admin\index.php

  1. <button type="button" class="layui-btn layui-btn-xs" onclick="edit({$user['id']})">
  2. <i class="layui-icon layui-icon-edit"></i>修改
  3. </button>
  4. <script>
  5. $ = layui.jquery;
  6. function edit(id){
  7. layer.open({
  8. type: 2,
  9. title:'修改管理员信息',
  10. shadeClose: false,
  11. shade:0.8,
  12. area:['480px','450px'],
  13. content:'/admin/admin/edit?id='+id
  14. });
  15. }
  16. </script>

修改页面视图 Admin\edit.php

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css">
  6. <script type="text/javascript" src="/static/layui/layui.js"></script>
  7. </head>
  8. <body>
  9. <div class="layui-form" style="padding: 10px;">
  10. <input type="hidden" name="id" value="{$item['id']}">
  11. <div class="layui-form-item">
  12. <label class="layui-form-label">用户名</label>
  13. <div class="layui-input-block">
  14. <input type="text" class="layui-input" name="username" value="{$item['username']}" readonly="readonly">
  15. </div>
  16. </div>
  17. <div class="layui-form-item">
  18. <label class="layui-form-label">密码</label>
  19. <div class="layui-input-block">
  20. <input type="text" class="layui-input" name="password" autocomplete="off" placeholder="请输入要修改的密码">
  21. </div>
  22. </div>
  23. <div class="layui-form-item">
  24. <label class="layui-form-label">角色</label>
  25. <div class="layui-input-block">
  26. <select name="gid">
  27. <option></option>
  28. <?php foreach($groupList as $group){?>
  29. <option value="{$group['id']}" {$item['gid']==$group['id']?'selected':''}>{$group['title']}</option>
  30. <?php }?>
  31. </select>
  32. </div>
  33. </div>
  34. <div class="layui-form-item">
  35. <label class="layui-form-label">真实姓名</label>
  36. <div class="layui-input-block">
  37. <input type="text" class="layui-input" name="truename" value="{$item['truename']}">
  38. </div>
  39. </div>
  40. <div class="layui-form-item">
  41. <label class="layui-form-label">电话</label>
  42. <div class="layui-input-block">
  43. <input type="text" class="layui-input" name="phone" value="{$item['phone']}" lay-verify="required">
  44. </div>
  45. </div>
  46. <div class="layui-form-item">
  47. <label class="layui-form-label">状态</label>
  48. <div class="layui-input-block">
  49. <input type="checkbox" {$item['status']==1?'checked':''} lay-skin="primary" name="status" title="禁用">
  50. </div>
  51. </div>
  52. <div class="layui-input-block">
  53. <button class="layui-btn" onclick="save()">保存</button>
  54. </div>
  55. </div>
  56. </body>
  57. </html>
  58. <script type="text/javascript">
  59. $ = layui.jquery;
  60. // 回车保存
  61. $('input').keydown(function(e){
  62. if(e.keyCode == 13){
  63. save();
  64. }
  65. });
  66. // 保存修改
  67. function save(){
  68. var id = $('input[name="id"]').val();
  69. var username = $.trim($('input[name="username"]').val());
  70. var password = $.trim($('input[name="password"]').val());
  71. var gid = $('select[name="gid"]').val();
  72. var truename = $.trim($('input[name="truename"]').val());
  73. var phone = $.trim($('input[name="phone"]').val());
  74. var status = $('input[name="status"]').is(':checked')?1:0;
  75. // 提交信息
  76. var data = {
  77. id:id,
  78. username:username,
  79. password:password,
  80. gid:gid,
  81. truename:truename,
  82. phone:phone,
  83. status:status
  84. };
  85. // 提交修改
  86. $.post('/admin/admin/edit',data,function(res){
  87. // 验证返回
  88. if(res.code>0){
  89. return layer.alert(res.msg,{icon:2});
  90. }
  91. layer.alert(res.msg,{icon:1});
  92. setTimeout(function(){parent.window.location.reload();},1000);
  93. },'json');
  94. }
  95. </script>

四、管理员添加

此处需要注意:返回后台的数据,用户名要进行查重处理,已存在的用户名禁止再次添加相同名称。

  1. <?php
  2. namespace app\admin\controller;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. use think\facade\Request;
  6. /**
  7. * 管理员管理
  8. */
  9. class Admin extends Base
  10. {
  11. // 账号列表...
  12. // 添加管理员
  13. public function add(){
  14. if(Request::isPost()){
  15. // 保存修改的用户信息
  16. $user = Request::post();
  17. // 对密码进行加密处理
  18. $user['password'] = password_hash($user['password'],PASSWORD_DEFAULT);
  19. $user['add_time'] = time();
  20. $user['lastlogin'] = time();
  21. // 查看用户名是否已存在
  22. $username = Db::table('admin')->where('username',$user['username'])->find();
  23. if(!empty($username)){
  24. exit(json_encode(array('code'=>1,'msg'=>'用户名已存在')));
  25. }
  26. // 添加数据
  27. $res = Db::table('admin')->save($user);
  28. // 添加成功
  29. if(empty($res)){
  30. exit(json_encode(array('code'=>1,'msg'=>'添加失败')));
  31. }
  32. exit(json_encode(array('code'=>0,'msg'=>'添加成功')));
  33. }else{
  34. // 查询角色列表
  35. $data['groupList'] = Db::table('admin_group')->field('id,title')->select();
  36. return view('/admin/add',$data);
  37. }
  38. }
  39. // 修改管理员...
  40. }

添加页面视图和修改大致相同只是一开始不需要传入数据

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title></title>
  5. <link rel="stylesheet" type="text/css" href="/static/layui/css/layui.css">
  6. <script type="text/javascript" src="/static/layui/layui.js"></script>
  7. </head>
  8. <body>
  9. <div class="layui-form" style="padding: 10px;">
  10. <div class="layui-form-item">
  11. <label class="layui-form-label">用户名</label>
  12. <div class="layui-input-block">
  13. <input type="text" class="layui-input" name="username" autocomplete="off" placeholder="请输入用户名" >
  14. </div>
  15. </div>
  16. <div class="layui-form-item">
  17. <label class="layui-form-label">密码</label>
  18. <div class="layui-input-block">
  19. <input type="text" class="layui-input" name="password" autocomplete="off" placeholder="请输入密码">
  20. </div>
  21. </div>
  22. <div class="layui-form-item">
  23. <label class="layui-form-label">角色</label>
  24. <div class="layui-input-block">
  25. <select name="gid">
  26. <option></option>
  27. <?php foreach($groupList as $group){?>
  28. <option value="{$group['id']}">{$group['title']}</option>
  29. <?php }?>
  30. </select>
  31. </div>
  32. </div>
  33. <div class="layui-form-item">
  34. <label class="layui-form-label">真实姓名</label>
  35. <div class="layui-input-block">
  36. <input type="text" class="layui-input" name="truename" placeholder="请输入姓名">
  37. </div>
  38. </div>
  39. <div class="layui-form-item">
  40. <label class="layui-form-label">手机号</label>
  41. <div class="layui-input-block">
  42. <input type="text" class="layui-input" name="phone" lay-verify="required" placeholder="请输入电话号码">
  43. </div>
  44. </div>
  45. <div class="layui-form-item">
  46. <label class="layui-form-label">状态</label>
  47. <div class="layui-input-block">
  48. <input type="checkbox" lay-skin="primary" name="status" title="禁用">
  49. </div>
  50. </div>
  51. <div class="layui-input-block">
  52. <button class="layui-btn" onclick="save()">保存</button>
  53. </div>
  54. </div>
  55. </body>
  56. </html>
  57. <script type="text/javascript">
  58. $ = layui.jquery;
  59. // 回车保存
  60. $('input').keydown(function(e){
  61. if(e.keyCode == 13){
  62. }
  63. });
  64. // 添加用户
  65. function save(){
  66. var username = $.trim($('input[name="username"]').val());
  67. var password = $.trim($('input[name="password"]').val());
  68. var gid = $('select[name="gid"]').val();
  69. var truename = $.trim($('input[name="truename"]').val());
  70. var phone = $.trim($('input[name="phone"]').val());
  71. var status = $('input[name="status"]').is(':checked')?1:0;
  72. if(username==''){
  73. return layer.alert('用户名不能为空',{icon:2});
  74. }
  75. if(password==''){
  76. return layer.alert('密码不能为空',{icon:2});
  77. }
  78. if(gid==''){
  79. return layer.alert('请选择角色信息',{icon:2});
  80. }
  81. if(truename==''){
  82. return layer.alert('请输入姓名',{icon:2});
  83. }
  84. // 提交信息
  85. var data = {
  86. username:username,
  87. password:password,
  88. gid:gid,
  89. truename:truename,
  90. phone:phone,
  91. status:status
  92. };
  93. // 提交修改
  94. $.post('/admin/admin/add',data,function(res){
  95. // 验证返回
  96. if(res.code>0){
  97. return layer.alert(res.msg,{icon:2});
  98. }
  99. layer.alert(res.msg,{icon:1});
  100. setTimeout(function(){parent.window.location.reload();},1000);
  101. },'json');
  102. }
  103. </script>

管理员列表页添加按钮操作

  1. <button style="float: right;" type="button" class="layui-btn layui-btn-normal layui-btn-radius layui-btn-sm" onclick="add()">
  2. <i class="layui-icon layui-icon-add-1"></i>添加
  3. </button>
  4. <script>
  5. $ = layui.jquery;
  6. function add(){
  7. layer.full(layer.open({
  8. type: 2,
  9. title:'添加管理员',
  10. shadeClose: false,
  11. maxmin: true,
  12. shade:0.8,
  13. area:['480px','450px'],
  14. content:'/admin/admin/add'
  15. }));
  16. }
  17. </script>

五、管理员删除

略……

此处不建议删除,如果不在需要该用户登陆,从后台管理员列表中修改为禁用即可,登陆时已做处理和提示信息。

附:列表页删除按钮操作代码,如需相应操作,Admin控制器中增加del方法即可,请求地址/admin/del

  1. <button type="button" class="layui-btn layui-btn-xs layui-bg-red" onclick="del({$user['id']})">
  2. <i class="layui-icon layui-icon-delete"></i>删除
  3. </button>
  4. <script>
  5. $ = layui.jquery;
  6. function del(id){
  7. layer.confirm('确定要删除吗?',{
  8. icon:3,
  9. btn: ['确定','取消']
  10. },function(){
  11. $.post('',{'id':id},function(res){
  12. if(res.code>0){
  13. layer.alert(res.msg,{icon:2});
  14. }else{
  15. layer.msg(res.msg);
  16. setTimeout(function(){window.location.reload();},1000);
  17. }
  18. },'json');
  19. });
  20. }
  21. </script>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议