通用后台管理系统的登录模块总结

原创 2018-11-21 09:11:46 733
摘要:总结:1登录页面:后台系统一般为系统管理员或者内部人员使用,故后台登录界面只需简洁效率,使用体验好即可。2.管理员的数据表设计:可以通过对用户赋予角色来进行用户权限的控制;数据表字段名要简洁,见名知意;数据存储尽可能无冗余;用户密码不得以明码的形式进行存储。3.数据库访问类的封装(重难点):在TP5.1中框架本身提供了大量的数据库的操作方法,但大多数情况下我们不需那么多方法,为避免方法的滥用以及自

总结:1登录页面:后台系统一般为系统管理员或者内部人员使用,故后台登录界面只需简洁效率,使用体验好即可。

2.管理员的数据表设计:可以通过对用户赋予角色来进行用户权限的控制;数据表字段名要简洁,见名知意;数据存储尽可能无冗余;用户密码不得以明码的形式进行存储。

1.PNG

3.数据库访问类的封装(重难点):在TP5.1中框架本身提供了大量的数据库的操作方法,但大多数情况下我们不需那么多方法,为避免方法的滥用以及自定义数据的返回格式,所以进行数据库方法类的封装。

class SysDb{
	// 指定表名
	public function table($table){
		$this->where = [];
		$this->field = '*';
		$this->order = '';
		$this->limit = 0;
		$this->table = $table;
		return $this;
	}

	// 指定查询字段
	public function field($field = '*'){
		$this->field = $field;
		return $this;
	}

	// 加载数量
	public function limit($limit){
		$this->limit = $limit;
		return $this;
	}

	// 排序
	public function order($order){
		$this->order = $order;
		return $this;
	}

	// 指定查询条件
	public function where($where = []){
		$this->where = $where;
		return $this;
	}

	// 返回一条记录
	public function item(){
		return Db::name($this->table)->field($this->field)->where($this->where)->find();
	}

	// 返回多条数据
	public function lists(){
		$query = Db::name($this->table)->field($this->field)->where($this->where);
		$this->limit && $query = $query->limit($this->limit);//判断有没有limlit,若存在,query语句加上limit
		$this->order && $query = $query->order($this->order);//判断有没有order,若存在,query语句加上order
		return $query->select();
	}

	// 自定义索引
	public function cates($index){
		$query = Db::name($this->table)->field($this->field)->where($this->where);
		$this->limit && $query = $query->limit($this->limit);//判断有没有limlit,若存在,query语句加上limit
		$this->order && $query = $query->order($this->order);//判断有没有order,若存在,query语句加上order
		$lists = $query->select();
		if(!$lists){
			return $lists;
		}
		$result = [];
		foreach ($lists as $key => $value) {
			$result[$value[$index]] = $value;
		}
		return $result;
	}

	public function count(){
		return Db::name($this->table)->where($this->where)->count();
	}


	// 分页
	public function pages($pageSize = 10){
		$total = Db::name($this->table)->where($this->where)->count();
		$query = Db::name($this->table)->field($this->field)->where($this->where);
		$this->order && $query = $query->order($this->order);
		$data = $query->paginate($pageSize,$total);
		return array('total'=>$total,'lists'=>$data->items(),'pages'=>$data->render());
	}

	// 添加
	public function insert($data){
		return Db::name($this->table)->insertGetId($data);//返回受影响的行数
	}

	// 批量添加数据
	public function insertAll($data){
		return Db::name($this->table)->insertAll($data);
	}

	// 修改
	public function update($data){
		return Db::name($this->table)->where($this->where)->update($data);
	}

	// 删除
	public function delete(){
		return Db::name($this->table)->where($this->where)->delete();
	}
}

4.登录的系统功能的实现:在用户系统登录时,应该设置好对用户错误操作(或错误信息)的友好提示功能;在系统登录后,用户的信息一般会被保存在Session中。

<!DOCTYPE html>
<html>
<head>
	<title>后台登录</title>
	<link rel="stylesheet" type="text/css" href="/static/plugins/layui/css/layui.css">
	<script type="text/javascript" src="/static/plugins/layui/layui.js"></script>
	<style type="text/css">
		body{background: #0094ff;}
	</style>
</head>
<body>
	<div style="position: absolute;left: 50%;top: 50%;width: 500px;margin-left: -250px;margin-top: -200px;">
		<div style="background: #ffffff;padding: 20px;border-radius: 4px;box-shadow:5px 5px 20px #444444;">
			<div class="layui-form">
				<div class="layui-form-item" style="color: gray;">
					<h2>后台管理系统</h2>
				</div>
				<hr>
				<div class="layui-form-item">
					<label class="layui-form-label">用户名</label>
					<div class="layui-input-block">
						<input type="text" class="layui-input" id="username">
					</div>
				</div>
				<div class="layui-form-item">
					<label class="layui-form-label">密&nbsp;&nbsp;&nbsp;&nbsp;码</label>
					<div class="layui-input-block">
						<input type="password" class="layui-input" id="password">
					</div>
				</div>
				<div class="layui-form-item">
					<label class="layui-form-label">验证码</label>
					<div class="layui-input-inline">
						<input type="text" class="layui-input" id="verifycode">
					</div>
					<img src="{:captcha_src()}" id="img" onclick="reloadImg()">
				</div>
				<div class="layui-form-item">
					<div class="layui-input-block">
						<button class="layui-btn" onclick="dologin()">登录</button>
					</div>
				</div>
			</div>
		</div>
	</div>
</body>
</html>
<script type="text/javascript">
	layui.use('layer',function(){
		layer = layui.layer;
		$ = layui.jquery;

		// 获取焦点
		$('#username').focus();

		// 直接回车登录
		$('input').keydown(function(e){
			if(e.keyCode == 13){
				dologin();
			}
		});
	});

	// 重新加载验证码
	function reloadImg(){
		$('#img').attr('src','{:captcha_src()}?rand='+Math.random());
	}

	function dologin(){
		var username = $.trim($('#username').val());
		var password = $('#password').val();
		var verifycode = $('#verifycode').val();
		if(username==''){
			layer.alert('请输入用户名',{'icon':2});
			return;
		}
		if(password == ''){
			layer.alert('密码不能为空',{'icon':2});
			return;
		}
		if(verifycode==''){
			layer.alert('验证码不能为空',{'icon':2});
			return;
		}
		$.post('{:url(\'DoLogin\')}',{'username':username,'password':password,'verifycode':verifycode},function(res){
			if(res.code>0){
				reloadImg();
				layer.alert(res.msg,{'icon':2});
			}else{
				layer.msg(res.msg);
				setTimeout(function(){window.location.href='/index.php/admin/home/index'},1000);
			}
		},'json');
	}
</script>

5.防止非法登录:利用保存在 Seesion中用户信息进行判断用户是否进行登录操作,对未登录的用户进行强制导航至登录页面。

<?php
namespace app\admin\controller;
use think\Controller;
use Util\SysDb;

class Base extends Controller{
public function __construct(){
	parent::__construct();
	$this->admin = session('admin');
	if(!$this->admin){
		header('Location:/index.php/admin/account/login');
		exit;
	}
}
}


发布手记

热门词条