jQuery EasyUI快速入门03

目录

一、权限系统

(1)访问控制策略

1、自由型访问控制

2、强制性访问控制

3、基于角色的访问控制

4、规则驱动的基于角色的访问控制

5、基于属性证书的访问控制

(2)RBAC模型   

1、RBAC是什么?

2、RBAC重要对象:

 (3)权限系统的组成

1、用户表

2、角色表

3、权限表

4、用户角色表

5、角色权限表

二、示例显示 

(1)创建权限表(菜单表)

(2)编写数据库帮助类、实体类

1、数据库帮助类

2、实体类

(3)编写数据访问层和业务逻辑层

1、数据访问层

2、业务逻辑层

(4)编写数据servlet类

(5)jsp页面布局显示


一、权限系统

(1)访问控制策略

1、自由型访问控制

          自由型访问控制:用户|对象来决定访问权限。信息的所有者来设定谁有权限来访问信息以及操作类型(读,写,执行...)是一种基于身份的访问控制。例如UNIX权限管理。

2、强制性访问控制

         强制性访问控制:系统来决定访问权限。安全属性是强制型的规定,它由安全管理员或操作系统根据限定的规则确定的,是一种规则的访问控制。

3、基于角色的访问控制

        基于角色的访问控制:角色决定访问权限。用组织角色来同意或拒绝访问。比MAC,DAC更灵活,适合作为大多数公司的安全策略,但对一些机密性高的政府系统不适用。(RBAC模型  )。

4、规则驱动的基于角色的访问控制

       规则驱动的基于角色的访问控制:提供了一种基于约束的访问控制,用一种灵活的规则描述语言和ixn的信任规则执行机制来实现。

5、基于属性证书的访问控制

       基于属性证书的访问控制:访问权限信息存放在用户属性证书的权限属性中,每个权限属性描述了一个或多个用户的访问权限。但用户对某一资源提出访问请求时,系统根据用户的属性证书中的权限来判断是否允许或拒绝。
 

(2)RBAC模型   

1、RBAC是什么?

           RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便

2、RBAC重要对象:

(1)用户(User):角色施加的主体;用户通过拥有某个或多个角色以得到对应的权限
(2)角色(Role):一组权限的集合
(3)权限(Permission):用户限定能够访问的一个资源

【注意】一个用户拥有若干角色,一个角色拥有若干权限,这样就构成了用户-角色-权限的授权模型。


 

 (3)权限系统的组成

1、用户表

            用户表:主键id,用户名,用户邮箱,是否为管理员,状态,创建时间,更新时间,......

2、角色表

            角色表:角色id,角色名,状态,创建时间,更新时间

3、权限表

            权限表(菜单权限表):权限id,权限标题,权限父级id,图标,权限路径,状态,排序,创建时间,更新时间,......

 

4、用户角色表

            用户角色表:主键id,用户id,角色id,创建时间,更新时间

5、角色权限表

            角色权限表:主键id,角色id,权限id,创建时间,更新时间,...... 

 

二、示例显示 

(1)创建权限表(菜单表)

create table tb_promission
(
	id number primary key,--权限id
    text varchar2(100) not null,--权限名称
    pid number not null,--权限父级id
    icon varchar2(100),--菜单显示的icon
    url varchar2(100),--权限资源路径
    state number,--状态;该记录是否有效1:有效、0:无效
    sort number--排序码
)
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(1,'店铺管理',-1,'','',1,1);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(2,'图书分类管理',-1,'','',1,2);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(3,'图书管理',-1,'','',1,3);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(4,'订单管理',-1,'','',1,4);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(5,'系统设置',-1,'','',1,5);

insert into tb_promission(id,text,pid,icon,url,state,sort) values
(6,'店铺添加',1,'','/addshop.jsp',1,6);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(7,'店铺列表',1,'','/shopList.jsp',1,7);

insert into tb_promission(id,text,pid,icon,url,state,sort) values
(8,'图书分类添加',2,'','/addBookType.jsp',1,8);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(9,'图书分类列表',2,'','/addBookTypeList.jsp',1,9);


insert into tb_promission(id,text,pid,icon,url,state,sort) values
(10,'图书添加',3,'','/addBook.jsp',1,10);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(11,'图书列表',3,'','',1,11);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(12,'所有图书',11,'','/addBookList.jsp',1,12);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(13,'未上架',11,'','/notAvailableBook.jsp',1,13);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(14,'已上架',11,'','/listedBook.jsp',1,14);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(15,'已下架',11,'','/removedBook.jsp',1,15);


insert into tb_promission(id,text,pid,icon,url,state,sort) values
(16,'所有订单',4,'','/orderList.jsp',1,16);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(17,'未付款订单',4,'','/UnpaidOrder.jsp',1,17);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(18,'已付款订单',4,'','/PaidOrder.jsp',1,18);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(19,'未收货订单',4,'','/UnconscionedOrder.jsp',1,19);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(20,'已完成订单',4,'','/DoneOrder.jsp',1,20);

insert into tb_promission(id,text,pid,icon,url,state,sort) values
(21,'系统设置',5,'','/SystemSettings.jsp',1,21);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(22,'菜单管理',5,'','/MenuManagement.jsp',1,22);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(23,'权限管理',5,'','/PermissionManagement.jsp',1,23);
insert into tb_promission(id,text,pid,icon,url,state,sort) values
(24,'用户管理',5,'','/UserManagement.jsp',1,24);

(2)编写数据库帮助类、实体类

1、数据库帮助类

         基于oracle的数据库帮助类

2、实体类

        多加一个集合属性(其他属性与数据库创表一致)与json相匹配

private List<Promission> children = new ArrayList<Promission>();

(3)编写数据访问层和业务逻辑层

1、数据访问层

      根据父级pid查询所有信息

	@Override
	public List<Promission> qurryPromissionAll(int pid) {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		List<Promission> list = new ArrayList<Promission>();
		Promission promission = null;
		String sql = "";
		try {
			conn = DBHelper.getConn();
			sql = "select id,text,pid,icon,url,state,sort from tb_Promission where pid =?";
			ps = conn.prepareStatement(sql);
			ps.setInt(1, pid);
			rs = ps.executeQuery();
			while (rs.next()) {
				promission = new Promission();
				promission.setId(rs.getInt("id"));
				promission.setText(rs.getString("text"));
				promission.setPid(rs.getInt("pid"));
				promission.setIcon(rs.getString("icon"));
				promission.setUrl(rs.getString("url"));
				promission.setState(rs.getInt("state"));
				promission.setSort(rs.getInt("sort"));
				list.add(promission);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			DBHelper.myClose(conn, ps, rs);
		}
		return list;
	}

2、业务逻辑层

    利用递归的方法实现最后的查询

  IPromissionDao ipd = new PromissionDaoImpl();
	@Override
	public List<Promission> qurryPromissionAll(int pid) {
		List<Promission> list = ipd.qurryPromissionAll(pid);
		for (Promission promission : list) {
			if(promission.getUrl() == null || "".equals(promission.getUrl())) {
				promission.setChildren(qurryPromissionAll(promission.getId()));
			}
		}
		return list;
	}

(4)编写数据servlet类

  调用业务逻辑层的方法查询数据

package com.zking.ht.promission.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zking.ht.promission.biz.IPromissionBiz;
import com.zking.ht.promission.biz.impl.PromissionBizImpl;
import com.zking.ht.promission.entity.Promission;
@WebServlet("/promissionListServlet.do")
public class PromissionListServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	request.setCharacterEncoding("utf-8");
	response.setCharacterEncoding("utf-8");
	response.setContentType("text/json;charset=utf-8");	
	IPromissionBiz ipb = new PromissionBizImpl();
	List<Promission> list = ipb.qurryPromissionAll(-1);	
	ObjectMapper mapper = new ObjectMapper();
	String reuslt = mapper.writeValueAsString(list);	
	PrintWriter out = response.getWriter();	
	System.out.println(reuslt);	
	out.write(reuslt);
	out.flush();
	out.close();	
	}
}

(5)jsp页面布局显示

         其中点击显示内容将在下次实现(404解决方案将于明天解决)

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<%@ include file="static/common/easyuibase.jsp"%>
</head>
<body>
	<div id="cc" class="easyui-layout" data-options="fit:true">
		<div data-options="region:'north',title:'首页头部',split:true"
			style="height: 100px;"></div>
		<div data-options="region:'south',title:'版权信息',split:true"
			style="height: 100px;"></div>
		<div data-options="region:'west',title:'菜单栏',split:true"
			style="width: 170px;">
			<div id="mytree" class="easyui-accordion"
				style="width: 170px; height: 500px;;"></div>
			<script type="text/javascript">
			$(function() {
				$('#mytree').tree({    
				    url:xPath+'/promissionListServlet.do',
				    onClick:function(node){
				    	addMyTabs(node);
				    }
				    
				}); 
			});		
			function addMyTabs(node) {
				if(node.id === '-1'){
					return;
				}
				var flag = $("#maintabs").tabs('exists',node.text);
				if(flag){
					$("#maintabs").tabs('select',node.text);
					return;
				}
				$("#maintabs").tabs('add',{
					title: node.text,
		    		content:"<iframe src = 'dodo.jsp' width =100% height =100%>",
		    		closable:true,  
				})
			}			
			</script>
		</div>
		<div data-options="region:'center',title:'内容'"
			style="padding: 5px; background: #eee;">
			<div id="maintabs" class="easyui-tabs" data-options="fit:true">
			</div>
		</div>
	</div>
</body>
</html>

 好的,以上便是今天的内容了,我们下次再见!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ning_ning_03

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值