【商城后台管理系统】基于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>

更多相关文章

  1. PHP:【商城后台管理系统】部署管理员列表,添加/编辑/删除功能
  2. 1.【商城后台管理系统】基于TP6开发后台管理员登陆页面渲染部署
  3. PHP:【商城后台管理系统】部署管理员未登录拦截,进行重定向
  4. PHP:【商城后台管理系统】admin超级管理员后台操作界面部署{无限
  5. PHP:【商城后台管理系统】admin超级管理员后台登录界面部署
  6. Google工程师:手机厂商们请不要再自行修改Linux内核代码了
  7. 修改MySQL表varchar类型 字段长度锁表情况分析
  8. Mysql 读写分离、主从复制
  9. Kubernetes 1.20.5 upgrade1.21.0后遗症

随机推荐

  1. Android的status bar分析
  2. Android四大组件之 BroadcastReceiver
  3. android开发必看资源URL
  4. Titanium Studio
  5. Feel Android Studio(1)Install and Upda
  6. Android TextView 换行
  7. android界面无标题栏和全屏效果的实现方
  8. 【Android 应用开发】Ubuntu 下 Android
  9. Android Studio 初体验
  10. Android WIFI 框架分析