最近在网上学习了一些权限管理系统,发现都差不多,只是复杂一些的权限管理系统分的更加细致,考虑的因素也越多。权限管理模块就是为了管理用户是否有权利访问某个权限,如果不能则拒绝访问。而我自己也做利用了jfinal做了一个简单的权限管理系统。小弟不精,可能还有些错误,请大家指明.
还有就是这里数据的表不对应贴出来的代码的表
数据库:
表1:super administrator (对应代码的teacher) 超级管理员的账号密码
表2:administrator 存储普通的管理员的账号密码
表3:administrator_message (对应代码的groups) 普通管理员的基本信息
表4:students
表5:student_message (对应代码的message)
表创建对应的id,name,age,sex,remark属性等
超级管理员inori:可以对学生进行增删改查,对其他管理员进行权限分配
普通的管理员miku:只能查看学生信息和增加学生
普通的管理员Alan:只能查看学生信息和修改学生信息
普通的管理员shiro:只能查看学生信息和删除学生
学生:只能查看自己的基本信息
我是在上两篇jfinal的基础上进行修改,只贴权限管理的部分代码
登录时的验证
package com.login;
import java.util.List;
import com.Interceptor.LogInterceptor;
import com.Permissions.Groups;
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.ext.render.CaptchaRender;
import com.students.students;
import com.teachers.teachers;
import net.sf.json.JSONObject;
public class loginControler extends Controller
{
public void index()
{
render("login.jsp");
}
public void login()
{
String username=getPara("username");
String password=getPara("password");
String sql="select * from teachers where username='"+username+"' and password='"+password+"'";
List<teachers> list=teachers.dao.find(sql);
//验证超级管理员身份
if(list.size()!=0 )
{
redirect("/choose");
}
else
{
sql = "select * from Administrator where username='"+username+"' and password='"+password+"'";
list=teachers.dao.find(sql);
if(list.size()!=0)
{
sql="select * from groups where name=(select name from Administrator where username='"+username+"' and password='"+password+"')";
List<Groups> groupslist=Groups.groups.find(sql);
setSessionAttr("groupslist", groupslist);
redirect("/students");
}
}
String str="select * from message where school_id='"+username+"' and password='"+password+"'";
List<students> student=students.students.find(str);
System.out.println(student.toString());
//验证学生登录身份
if(student.size()!=0 )
{
str="select * from students where name=(select name from message where school_id='"+username+"' and PASSWORD='"+password+"')";
List<students> stu=students.students.find(str);
setAttr("student", stu);
render("/message/message.jsp");
}
}
}
这是普通管理员的模块
package com.Permissions;
import com.jfinal.plugin.activerecord.Model;
//管理员模块
public class Groups extends Model<Groups>
{
public static final Groups groups=new Groups();
}
这是超级管理员登录的时能够看到的全部普通管理员基本信息模块
package com.Permissions;
import java.util.ArrayList;
import java.util.List;
import com.jfinal.core.Controller;
public class PermissionsGroups extends Controller
{
public void index()
{
List<Groups> groupslist=Groups.groups.find("select * from groups");
setAttr("groups", groupslist);
render("list.jsp");
}
public void form()
{
Groups group=Groups.groups.findById(getParaToInt(0));
if(group==null)
{
render("form.jsp");
}
else
{
setAttr("group", group);
render("form.jsp");
}
}
public void add()
{
Groups group=getModel(Groups.class,"group");
group.save();
redirect("/PermissionsGroups");
}
public void edit()
{
form();
}
public void delete()
{
Groups.groups.deleteById(getParaToInt(0));
index();
}
/**
* 注销账号
*/
public void logout()
{
redirect("/login");
}
}
下面是超级管理员对普通管理员团队进行增删改查
接下来是前端显示的页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<script type="text/javascript">
function add()
{
window.location.href="/students/form";
}
function edit(id)
{
window.location.href="/students/edit/"+id;
}
function del(id)
{
window.location.href="/students/delete/"+id;
}
function logout()
{
window.location.href="/students/logout/";
}
</script>
<body>
<c:forEach items="${groupslist}" var="groupslist">
<div><h1>欢迎${groupslist.name}</h1></div>
<button <c:if test="${groupslist.permissions!='1'}">disabled="true"</c:if> onclick="add()">增加学生</button>
</c:forEach>
<button onclick="logout()">注销账号</button>
<table border="2" width="80%">
<caption><h1>学生信息</h1></caption>
<thead>
<th>姓名</th>
<th>年龄</th>
<th>性别</th>
<th>备注</th>
<th rowspan="2">操作</th>
</thead>
<tbody>
<c:forEach items="${student}" var="student">
<tr>
<th>${student.name}</th>
<th>${student.age}</th>
<th>${student.sex}</th>
<th>${student.remark}</th>
<th>
<c:forEach items="${groupslist}" var="groupslist">
<button <c:if test="${groupslist.permissions!='2'}">disabled="true"</c:if> onclick="edit(${student.id})">修改</button>
<button <c:if test="${groupslist.permissions!='3'}">disabled="true"</c:if> onclick="del(${student.id})">删除</button>
</c:forEach>
</th>
</tr>
</c:forEach>
</tbody>
<tr>
<th colspan="5">总页数 ${pagination}/${page}
<a href="/students">首页</a>
<a href="/students/Previouspage/${pageNumber}-${pagination}">上一页</a>
<a href="/students/nextpage/${pageNumber}-${pagination}">下一页</a>
<a href="/students/trailerpage/">尾页</a>
<form action="/students/jumpPage/">
<label>跳转到</label>
<input type="text" name="number">
<button type="submit">确定</button>
</form>
</th>
</tr>
</table>
</body>
</html>
这是form.jsp表单
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/PermissionsGroups/add" method="post">
<label>姓名</label>
<input type="text" name="group.name" value="${group.name}">
<label>年龄</label>
<input type="text" name="group.age" value="${group.age}">
<div >
<label>性别</label>
<div>
<input type="radio" name="group.sex" <c:if test="${group.sex=='男'}">checked="checked"</c:if>value="男"> 男
</div>
<div>
<input type="radio" name="group.sex" <c:if test="${group.sex=='女'}">checked="checked"</c:if>value="女"> 女
</div>
</div>
<div>
<label>职务</label>
<select name="group.duty">
<option>选择职务</option>
<option value="人力部部长" ${group.duty=='人力部部长'?'selected':''}>人力部部长</option>
<option value="资源部部长" ${group.duty=='资源部部长'?'selected':''}>资源部部长</option>
<option value="信息部部长" ${group.duty=='信息部部长'?'selected':''}>信息部部长</option>
</select>
</div>
<div>
<label>权限</label>
<select name="group.permissions" ">
<option>选择权限</option>
<option value="1" ${group.permissions=='1'?'selected':''}>查看学生信息和增加学生</option>
<option value="2" ${group.permissions=='2'?'selected':''}>查看学生信息和修改学生信息</option>
<option value="3" ${group.permissions=='3'?'selected':''}>查看学生信息和删除学生</option>
</select>
</div>
<label>备注</label>
<textarea rows="10" cols="20" name="group.remark">${group.remark}</textarea>
<button type="submit">提交</button>
</form>
</body>
</html>
这是超级管理员登录界面
接下面是各个管理员的权限
接下面是源码链接(附上数据库): https://pan.baidu.com/s/1nuCZwWp 密码: bpxa
总结:其实刚开始做的时候没怎么想清楚要怎么做,就先做的先,后面慢慢摸索到技巧了,前面的东西要想规范化,就要全部修改。这个坏习惯一定会改!!!。这个简单权限管理系统思路就是