日期:2014-05-16 浏览次数:20474 次
这一天将讲述一个基本的基于数据库的权限管理系统的设计,在这一天的课程的最后将讲述“左右值无限分类实现算法”如何来优化“系统菜单”的结构而告终。今天的内容和前几天的基础框架是一样的它们都属于基础知识,在这些基础知识上还可以扩展出无数的变种与进化设计。
1. 所有的用户、角色可动态配置
2. 所有的系统菜单的权限要求具体到“增,删,改、查、打印、导出”这样的小权限的设计
3. 所有的权限基于角色来进行划分和判断
4. 一个用户可能属于多个角色
5. 系统菜单也能够动态的“增、删、改、查”
围绕上述需求,我们可以在数据库内进行如下的表设计,下面直接给出ER图:
上述设计有6张表,其中:
T_User表
用于存放用户信息,此处只存放基础信息
T_Role表
用于存放系统角色信息
T_User_Role表
用于存放系统用户与角色的匹配关系
T_Sys_Menu表
这张就是用于存放系统菜单的表了,这张表的设计主要使用了如下的表设计技巧:
注意这边的MENU_ID与MENU_PID
如果这个菜单项是一级菜单,那么我们把它的MENU_PID设为0
如果这个菜单是另一个菜单的子菜单,那么我们就把它的MENU_PID设为它的父菜单的MENU_ID。
有了这样的结构,我们一个递归就能把这颗“树”显示出来了,是不是?
此处以Oracle数据库为例,不使用递归,直接把树形结构在数据库中就造型造好(当然,还有更好的方法如:有人喜欢设level或者是deep这样的字段来简化程序解析树型结构菜单,稍后我们会来讲一个根本不需要用递归的树型菜单的设计来最大程度优化设计。)
显示整颗树型菜单结构的Oracle语句:
SELECT *FROM T_SYS_MENU STARTWITH MENU_PID=0 CONNECTBYPRIOR MENU_ID=MENU_PID orderby MENU_ID |
上述语句,已经用数据查询用句就将我们的这个“树”的层次关系理出来了,如果我们手上有一个控件叫dtree.js,那么一个循环就可以把这个树显示出来了,不是吗?
来看dtree.js的应用
//公式: d.add(menu_id, menu_pid, ‘menudescr’, ‘menu_url’); d = new dTree('d'); d.add(0,-1,'菜单'); d.add(1,0,'报表查询','example01.html'); d.add(2,1,'月报','example01.html'); d.add(3,1,'季报','example01.html'); &
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
|