该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-26
怎么是用JAVA写的web呀!
|
|
返回顶楼 | |
发表时间:2008-12-26
lz的功能权限能控制到按钮么?
我看到好像有 insert,update,这个怎么控制的? |
|
返回顶楼 | |
发表时间:2008-12-26
Lucas Lee 写道 Augustan 写道 Lucas Lee 写道 有个问题:
角色跟功能权限的关系没有描述啊? 实体关系图里也没有,界面里也没提及? 有提及: 四、角色(role):角色对应着某些功能(function)的集合,被分配一个角色意味着有权执行这些功能。角色表中的字段"functions"记录相关的功能id,id之间用逗号隔开。 这种联系无法在图中用箭头直接表述出来。 图片中那棵带选择框的树,就是为某个角色分配相应的功能。 哦。 但是界面上没有维护角色和功能关系的截图吧? 你这种用逗号分隔的方式,不符合数据库范式。还是少用为好。比如未来我如果要查某个权限分配给哪些角色了,你这个就麻烦了。注意,按字符串匹配是麻烦的,比如有角色A有权限a1,a11,a111,我查a1权限,如果直接按like就会匹配三个。 并不是说一定要符合数据库范式才好。不要拘泥于规则,要具体问题具体分析。 LZ这个就是例子也是目前大多数都在用的。我们也这么处理的,可是在实际工作中,发现这个也并不够灵活,而且如果涉及到人员调岗的,也很麻烦。 所以,user应该可以直接与function联系,最理想的是与role联系。跟oracle的处理一样 |
|
返回顶楼 | |
发表时间:2008-12-27
具体是怎么使用运行啊。 还需要配置什么? 不会。
init.properties 报错! datasource.type=mysql datasource.driverClassName=org.gjt.mm.mysql.Driver datasource.url=jdbc:mysql://localhost:3306/ajaxweb?useUnicode=true&characterEncoding=UTF-8 datasource.username=root datasource.password=123 datasource.maxActive=10 datasource.maxIdle=2 datasource.maxWait=120000 datasource.whenExhaustedAction=1 datasource.validationQuery=select 1 from dual datasource.testOnBorrow=true datasource.testOnReturn=false c3p0.acquireIncrement=3 c3p0.initialPoolSize=3 c3p0.idleConnectionTestPeriod=900 c3p0.minPoolSize=2 c3p0.maxPoolSize=50 c3p0.maxStatements=100 c3p0.numHelperThreads=10 c3p0.maxIdleTime=600 #hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect hibernate.dialect=org.hibernate.dialect.MySQLMyISAMDialect hibernate.jdbc.batch_size=25 hibernate.jdbc.fetch_size=50 hibernate.show_sql=true hibernate.connection.release_mode=after_transaction |
|
返回顶楼 | |
发表时间:2008-12-27
Augustan 写道 Lucas Lee 写道 有个问题:
角色跟功能权限的关系没有描述啊? 实体关系图里也没有,界面里也没提及? 有提及: 四、角色(role):角色对应着某些功能(function)的集合,被分配一个角色意味着有权执行这些功能。角色表中的字段"functions"记录相关的功能id,id之间用逗号隔开。 这种联系无法在图中用箭头直接表述出来。 图片中那棵带选择框的树,就是为某个角色分配相应的功能。 用逗号来保存关联,这种方式还是少用为好 如果要增加组,建议用户与组之间用多对多关系 如果部门的人员比较多,建议部门与组之间、部门与角色之间最好也要建立多对多关联 这样,用户的权限就是以下的并集: 用户-->角色-->功能 用户-->组-->角色-->功能 用户-->部门-->角色-->功能 用户-->部门-->组-->角色-->功能 |
|
返回顶楼 | |
发表时间:2008-12-27
好哦 把源码下来看看
|
|
返回顶楼 | |
发表时间:2008-12-28
Augustan 写道
本文介绍一个简易实用的web权限管理模块的应用与实现。 先介绍数据模型和应用界面,后继对实现细节做选择性阐述。 数据表关系如下:
该图标明了登陆用户、角色、部门(机构)、用户组、角色和模块功能之间的关系。为方便起见,所有表都只保留必要字段。 在本系统设计中,如下概念有着相对特殊的含义。 一、用户(user): 系统的使用者。 二、部门(org):体现了用户的行政关系, 三、组(group) :是某相同职能的用户的集合,可以和用户一样与角色产生关联。设置组的目的是为了方便用户的角色分配,减少用户与角色的直接对应关系。用户的角色可以是其组角色和其直接分配的角色之合集。限于作者的时间和精力,组功能在该系统中没有具体的实现。 五、功能(function):系统的一个或者多个执行准入。 那么如何表现“功能”以最终实现控制用户的每一个细微动作呢?假如不特定于某种架构,可以这么设计该表字段: CREATE TABLE `m2_function` ( `FUNCTION_ID` int(10) unsigned NOT NULL AUTO_INCREMENT, `NAME` varchar(50) NOT NULL, `FUNC_TREE_ID` int(10) unsigned NOT NULL, `RESOURCE` varchar(100) NOT NULL, `SUFFIX` varchar(50) NOT NULL, `DESCRIPTION` varchar(100) NOT NULL, `PARAMS` varchar(45) NOT NULL, PRIMARY KEY (`FUNCTION_ID`) ) DEFAULT CHARSET=utf8; 假定有三个web访问路径
由此可知,“功能”是衡量用户准入的最小刻度。在用户访问某个地址的时候,我们可以通过解析URL对比他拥有的“功能”权限来实现权限管理。 借助于某些架构或者设计思路,可以避免用户直接访问JSP页面,甚至全系统的访问地址都使用同一后缀,这种情况下可以省去SUFFIX字段。 本系统就是这种情况(JSP页面置于WEB-INF下,采用struts2架构)。 六、功能模块树(function tree):功能的目录组织,起分类的作用。在为角色设定功能的时候,用户界面可以利用带选择框的js树。而这颗js树是后台的功能树表以及功能表的联合表现形式。功能模块树可以方便的与菜单树建立映射关系,限于作者的时间和精力,该系统并未实现菜单树。
然后进入用户管理部分,会有一个用户列表:
还可以为用户设定多个角色: 接着,再看看角色的列表:
最后,在系统资源部分,可以进行功能模块树的编辑(和机构树的编辑一样)
点击编辑详细功能,可以为选中的结点设置具体功能:
配置妥当以后,当我们以一个普通用户登录,执行某个操作的时候,如果没有权限,系统会做出提示。关于用户的权限验证,后继会有介绍。
相关阐述请关注后继文章。
|
|
返回顶楼 | |
发表时间:2008-12-28
其实这里边还少了一些数据规则,最好再挂钩一个规则判断。
|
|
返回顶楼 | |
发表时间:2008-12-28
个人觉得:
角色和资源之间应该建立多对多的关系。不应该把众多资源的id写进角色的functions字段中。不知lz觉得如何? |
|
返回顶楼 | |
发表时间:2008-12-28
我也来支持一下
|
|
返回顶楼 | |