easyui03Tree后端工作

1.权限

RBAC模型(Role-Based Access Control:基于角色的访问控制)

###### **RBAC**

```
RBAC(Role-Based Access Control)-基于角色的访问控制,模型是20世纪90年代研究出来的一种新模型,但从本质上讲,这种模型是对前面描述的访问矩阵模型的扩展。这种模型的基本概念是把许可权(Permission)与角色(Role)联系在一起,用户通过充当合适橘色的成员而获得该角色的许可权。

在实际的组织中,为了完成组织的业务工作,需要在组织内部设置不同的职位,职位既标识一种业务分工,又标识一种责任与权利。根据业务分工的需要,职位被划分给不同群体,各个群体的人根据其工作任务的需要被赋予不同的职责和权力,每个人有权了解与使用与自己任务相关的信息与资源,对于那些不应该被知道的信息则应该限制他们访问,这就产生了访问控制的需求。

RBAC的组成:用户、角色和权限。

User(用户):每个用户都有唯一的UID识别,并被授予不同的角色
Role(角色):不同角色具有不同的权限
Permission(权限):访问权限
用户-角色映射:用户和角色之间的映射关系
角色-权限映射:角色和权限之间的映射

2 关系


            用户角色表(T_User_Role)      角色模块表(T_Role_Module)
       用户------------------------>角色------------------------->权限
     (T_User)                    (T_Role)                      (T_Module)

3.案例:显示菜单(数据库版本)

3.1主界面

<!-- 1.树形菜单 -->
			<!-- 
				组件的实现:
					1.纯标签+class = easyui-tree
					2.标签+js
		-->
		<!-- 创建UL容器即可实现搭建tree树形菜单 -->
		<ul id = "menuTree"></ul>
	</div>
	<div data-options="region:'center',title:'内容区域'" style="padding: 5px; background: #eee;">
		
		<!-- panel面板 -->
		<div style = "margin:0px;padding:0px" id="p" class="easyui-panel" data-options="fit:true,closable:true,collapsible:true,minimizable:true,maximizable:true">   
		  	<!-- 选项卡区域 -->
			<div id="myTabs" class="easyui-tabs" data-options = "fit:true"></div>  
		  
		  
		   
		</div>  
	</div>  
			
		
		
		
		
<!-- js -->	
<script type="text/javascript">
	//加载
	$(function(){
		//通过脚本的方式实现树形菜单
		$("#menuTree").tree({
			url:xPath+"/PromissionListServlet",
			//设置节点的点击事件
			onClick:function(node){//node 代表节点,点击  就能获取当前所点击的节点对象,根据node拿到指定的属性
				//console.log(node);
				//点击选项是,动态生成一个选项卡。
				addTabs(node);
			}
		});
	});
	
	//封装一个函数存储添加选项卡的代码
	function addTabs(node) {
		//alert(node.url);
		//如果没有url  则不生成tab选项卡
		if(node.url===null || node.url==="" || node.url === undefined){
			return;
		}
		
		
		//去重
		let flag = $("#myTabs").tabs('exists',node.text);
		if(flag){
			$("#myTabs").tabs('select',node.text);
			return;
		}
		
		//console.log(node);
		$("#myTabs").tabs('add', {
			//设置选项卡的标题
			title : node.text,
			//设置选项的关闭按钮
			closable : true,
			//选项卡内容
			content : "<iframe src = '"+xPath+node.url+"' border='0' width = '100%' height = '100%'>"
		});
	}
	
	
	
	
	
	
	
	
	
	
	//封装一个函数存储添加选项卡的代码
	function addTabs2(node) {
		//1.可以统一一级菜单的id全部为一个值 -1
		/* 
			if(node.id === '-1'){
				return;
			} 
		 */

		//2.通过判断节点
		if (node.children != null) {
			return;
		}

		//判断即将生成的选项卡是否已存在?
		let flag = $("#myTabs").tabs('exists', node.text);
		if (flag) {
			//如果存在,就默认选中
			$("#myTabs").tabs('select', node.text);
			return;
		}

		$("#myTabs").tabs('add', {
			//设置选项卡的标题
			title : node.text,
			//设置选项的关闭按钮
			closable : true,
			//选项卡内容
			content : "<h1>我是内容</h1>"
		});
	}
</script>

3.2servlet

// 1.设置编码
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("utf-8");
		// text/html;charset=utf-8
		response.setContentType("application/json;charset=utf-8");
		// 2.获取请求参数(省略)

		// 3.根据获取的参数处理请求
		// 实例化biz
		IPromissionBiz ipb = new PromissonBizImpl();
		List<Promission> promissionAll = ipb.getPromissionAll(-1);
		// 4.响应
		// 获取JSON工具
		ObjectMapper mapper = new ObjectMapper();
		String result = mapper.writeValueAsString(promissionAll);
		
		//获取out
		PrintWriter out = response.getWriter();
		out.write(result);
		out.flush();
		out.close();
		

3.3dao方法

public List<Promission> getPromissionAll(Integer pid) {
		Connection conn = null;//连接对象
		PreparedStatement ps = null;//执行对象
		ResultSet rs = null;//结果集对象
		List<Promission> list = new ArrayList<Promission>();//集合
		String sql = null;//sql
		Promission promission = null;//实体
		try {
			//获取数据库连接
			conn = DBHelper.getConn();
			//sql
			sql = "select id,text,pid,icon,url,state,sort from tb_promission where pid = ? order by sort asc";
			//ps
			ps = conn.prepareStatement(sql);
			//占位符
			ps.setInt(1, pid);
			//rs
			rs = ps.executeQuery();
			while(rs.next()) {
				promission = new Promission();
				//设置
				promission.setId(rs.getInt(1));
				promission.setText(rs.getString(2));
				promission.setPid(rs.getInt(3));
				promission.setIcon(rs.getString(4));
				promission.setUrl(rs.getString(5));
				promission.setState(rs.getInt(6));
				promission.setSort(rs.getInt(7));
				
				list.add(promission);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			
		}
		
		return list;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值