ralasafe使用中间件

Post navigation

让ralasafe 查询设计ORM更加智能

我最近在开发项目,使用了Ralasafe。Ralasafe的查询设计能够自动帮忙进行orm,能够根据列名进行ORM(如:name映射到name,someName映射到some_name等);能够根据表名列名、实体bean的级联映射(如:domain表的id字段映射到domain<Domain>属性的id属性)。

有的时候,我有这样的Java 实体bean。

1
2
3
4
5
6
public UrlApp {
private int id;
private String domainName;
private String appName;
....
}

我希望domainName属性自动与关联表domain的name列进行关联;appName属性自动与关联表app的name列进行关联。(现在是:domainName/appName无法得到自动关联,需要手工改动;ralasafe自动将domain和app表的name属性都关联到name java属性)

该功能现已实现,并提交到SVN。感觉orm更加智能了,手工编辑工作量又少了一些!

Posted in 源代码 | Tagged , , | 8 Replies

部分Ralasafe集成应用案例

今天上海开源委员会让我统计一下Ralasafe使用情况。我在Ralasafe QQ群里面喊了几句,不少网友响应,将其集成的案例分享出来。因为有的案例,不方便告知公司或者客户名称,就使用xxx代替了。以下是名单,也欢迎遗漏的朋友们补充:

  1. xxx银行对公客户关系管理系统
  2. 太极计算机执行案件管理系统
  3. 急速迷
  4. 开放医疗平台freehealth
  5. 新时代信托管理系统
  6. xxx信用社协同办公平台
  7. 健康促进物联网
  8. 北京天下图数据技术有限公司内部项目管理系统
  9. 北京xxx电子商务互联网公司CRM管理系统
  10. 杭州xxx电子商务互联网公司CRM管理系统
  11. xxx审计项目成本核算系统
  12. 东盟博览会在线摇奖管理系统
  13. 福州xxx OA管理系统
  14. 广州国润科技 OA项目
  15. 江门市氯气瓶监控平台
  16. xxx特种设备–电梯设备监控平台
  17. 美包包
  18. 医疗订单集成系统OIS
Posted in 应用实践 | Tagged | 7 Replies

《优盟通讯》电子期刊 09月刊

优盟通讯9月刊出炉了,欢迎各位开源爱好者下载阅读

优盟全称“开源及基础软件通用技术创新战略联盟”,是一个年轻的创新性组织,“建立开源社区,实现国产基础软件产业化推广模式的创新”是优盟的发展目标之 一,所以优盟自成立以来,一直密切关注着中国国内社区的发展,给予了国内社区大量的支持,为中国开源社区的发展作出了突出贡献。为了让更多的人及时跟踪优 盟及各成员单位的最新动态,深层次透视政府政策导向,迅速获悉开源领域的最新资讯,优盟特创此电子期刊——《优盟通讯》,这不仅是一个高效的 “宣传渠道”,更是一个您了解开源领域最新态势,及政府政策导向的“窗口”。

Posted in Uncategorized | Tagged | 1 Reply

权限管理不仅仅是权限设置模块

引子

几年前,我开始讲权限管理中间件时。我周边所有人几乎都把它与每个系统的权限设置模块相对应。也有不少系统将“权限设置”,写为“权限管理”。不深入追究意思,差别也不大。

通过这几年下来,虽然做了很多宣传,很多普及,但还是有很多人这么认为。因此写本文做一些讲解。

权限管理

权限管理,应该包括权限设置(授权)和权限验证(鉴权)两大部分。我觉得还可以添加一项权限测试。

权限管理由权限设置、权限验证和权限测试3部分组成权限设置(授权),是用户可见的,用户通过界面进行操作。最好还能做相关测试,以检测设置是否正确。这就是为什么我添加了权限测试。

其中,权限设置又包括功能级权限设置和数据级权限设置。

权限认证(鉴权),是用户不可见的。由系统后端进行权限判断。Ralasafe的权限引擎,就实现了该功能。

权限在哪里与业务分离

权限与业务分离,是指权限验证与业务逻辑判断分离。并不是指权限设置非常通用,可以表达各种权限逻辑或者权限关系。

而,现实中我们很多系统权限验证逻辑和业务逻辑是混杂在一起的,根本就没有把权限提取出来。那么,怎样才算把权限提取出来了呢?业务方法做到与用户无关,就是简单做一件事情

  1. 无用户无关:业务方法不区分这是谁,都按照同样逻辑做事
  2. 做一件事情:说明该方法高内聚,低耦合

只有实现了权限与业务分离,才能使业务系统SOA化!每个都是服务。

Ralasafe是怎样做权限管理的呢?

Ralasafe架构讲明了Ralasafe包括权限引擎和Web控制端2大组件。

Ralasafe的web控制端能够实现功能级权限设置,又能做数据级权限设置。设置完毕后,还能做权限测试,验证是否设置正确。

Ralasafe权限引擎,负责鉴权,返回鉴权结果。

Posted in 文档 | Tagged , , , , | 6 Replies

答复:张同学的Ralasafe文章

哈哈,现在Ralasafe的文章收录速度越来越快!包括Ralasafe.cn网站内容,还有其他网站书写的关于Ralasafe内容。

Ralasafe志愿者写了篇文章:写在Ralasafe1.2版本发布之后 2.0版本发布之前

非常高兴看到社区朋友不断互动,我就爱看到这种效果。这种互动,也会促使我开源的热心;如果没有互动,我很快就不会再维护开源了。毕竟,我也是人嘛~

他的文章很长,内容很充实。因此,给予认真回复

感谢张同学这么长时间跟踪Ralasafe,并且在开发系统里面使用Ralasafe!
文章发出来,2个顶,3个踩。说明很多开发者可能没有从中读取到需要的东西。虽然,我是看到了很多东西。这和我对Ralasafe非常熟悉,是有关的。

  1. 1.0版本,GWT界面借助了应用程序样式,把功能在一个页面表现的淋漓尽致;
  2. 1.1版本,采用jQuery的目的,是为了开发者更容易定制,同时大幅缩减了Ralasafe web控制端大小。从50M缩减到1.3M;
  3. 1.2版本,从集成舒适性角度,将Ralasafe相关内容进一步分离出来。

Ralasafe定位非常明确,定位且仅定位于权限管理领域,深入解决数据级权限管理问题。身份认证等问题,有很多集成方案,Ralasafe不会重复造轮。最方便的方案,应该使用Shino了,Spring Security已经非常庞大。

Ralasafe坚持社区化研发路线,将研发过程社区化,对社区透明;倾听社区声音,社区也积极参与进来。张同学,你就是一名参与者。为我们贡献了代码,设计讨论,1.1版本的ORACLE分发包。

期待,大家继续!开源努力!

Posted in 应用实践, 社区建设 | Tagged , | 10 Replies

我鼓励使用Ralasafe查询权限

陆续有开发者咨询:怎样只使用Ralasafe查询权限的where条件,查询继续使用自己的ORM框架?

我的回答是:鼓励使用Ralasafe的查询权限,不使用你的ORM。当然,使用Ralasafe的where,继续使用你的ORM也是可以的。
原因如下:

  1. 改动小:使用Ralasafe的查询权限,对你的ORM代码改动小,不需要改动你原来的查询代码。只要在你的web/service层调用Ralasafe查询API即可
  2. 收益大:权限管理中的数据级查询权限,往往非常复杂。需求有:行级、列级。只给你where条件,能控制行级,但不能控制列级。Ralasafe查询权限可以做到控制列级

下面,我们给出一些代码示例做比较。这是不用Ralasafe,开发者需要编写的查询DAO代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/**
查询所有
*/
public Collection selectAll() {
...
}
/**
根据用户id进行查询
*/
public Collection selectByUser( int userId ) {
...
}
/**
根据组织机构进行查询
*/
public Collection selectByOrgId( int orgId ) {
...
}
/**
根据机构层级查询
*/
public Collection selectCacadeByOrgId( int orgId ) {
...
}

需要多少个方法,由权限管理需求的复杂性。权限管理需求越复杂,方法就越多。每个方法,当然都需要开发者人工编写。

其实这些方法是远远不够的,即使不考虑需求变化。很明显少了这样的方法:

  1. 根据条件进行查询
  2. 查询总记录条数
  3. 分页查询

巴拉巴拉,我们是苦命的程序员。又要编写很多DAO方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
查询记录总数:
此处应该是selectAllCount, selectByUserIdCount, selectByOrgIdCount
selectCascadeByOrgIdCount等
*/
public int select...Count(...) {
...
}
/**
自定义条件查询:
此处应该是selectAll, selectByUserId, selectByOrgId
selectCascadeByOrgId等
*/
public Collection select...( ..., Where where ) {
...
}
/**
分页查询:
此处应该是selectAll, selectByUserId, selectByOrgId
selectCascadeByOrgId等
*/
public Collection select...( ..., int fromIndex, int size ) {
...
}

穷不尽,非常啰嗦,非常苦逼。老实说,很多开发者搞了很多年,总是认为自己重复CURD操作。而权限管理,尤其是查询权限管理,几乎是完全占据了R(read,即select)操作。

如果使用Ralasafe 查询权限API,非常简单。这些DAO的select方法没有了(可以留着,反正不再使用了,不需要再次维护)。DAO的update/delete/add方法继续保留。在你的servlet/action/service层(/表示或者,只要在一个地方调用就够了,我建议在servlet/action层调用)。代码格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
//Ralasafe的分页查询,也有不分页的查询,自定义条件查询
QueryResult qr=Ralasafe.query( Constants.SOME_QUERY_PRIVILEGE, userId, fromIndex, size );
// 查询结果,集合里面的数据类型是开发者自定义的ViewObject(Javabean)
Collection queryBeans=qr.getData();
// 如果完整执行查询,总记录条数,对于分页显示很有用
int totalCount=qr.getTotalCount();
// 当前用户可以查询哪些字段
Collection queryFields=qr.getFields();
// 哪些字段对于当前用户是只读的
Collection readOnlyFields=qr.getReadOnlyFields();

所有权限逻辑,都不在代码里面。权限管理逻辑都通过Ralasafe web designer进行在线图形化设计,最后通过保存在策略文件里面。(策略文件是通过Ralasafe web designer设计出来的,无需手工编写。)还可以在线测试!

Posted in 应用实践 | Tagged , , | 2 Replies

1.2版本的BUG及解决办法

我今天写英文wiki时候,重现出一个BUG。

当我在定义“业务数据分类”时,定义一个变量——类型是数据查询。弹出的数据查询变量定义页,却无法选择查询。数据查询的drop menu空空如也。

打开firebug一看,错误是:

“NetworkError: 404 /demo/ralasafe/query/queryMng – http://localhost:8080/demo/ralasafe/query/queryMng?oper=loadTree”

这个BUG解决非常简单。主要是1.2版本将ralasafe后缀都添加了.rls。此处应该请求queryMng.rls,而不是queryMng。

修改webcontent/ralasafe/common/queryRef.jsp第58行,修改为:

1
asyncUrl: "../query/queryMng.rls?oper=loadTree" ,

非常简单吧!

Posted in 源代码 | Tagged | 6 Replies

Ralasafe 1.2版本发布

很荣幸宣布Ralasafe开源访问控制(权限管理)中间件 1.2版本于2011年9月14日发布!距离上一版本发布约1.5个月时间,发布频率挺好。

本版本主要实践了社区需求修改社区报告的BUG,并提高了权限引擎执行效率。本次最大变化是:采用FrontController 模式,把web.xml里面ralasafe配置内容转移到独立配置文件,让开发者集成起来更爽!

Ralasafe开源软件高举宗旨:为开发人员节约更多时间,去陪恋人、家人和朋友

下载文件:

  1. 基于mysql环境的中文demo
  2. 基于mysql环境的英文demo
  3. Ralasafe bianry(无demo)
  4. Ralasafe source

文档已经WIKI化,欢迎大家指正完善:

  1. Cookbook
  2. 配置手册
  3. 开发实践
Posted in 下载, 版本计划 | Tagged , , , | 22 Replies

个性需求与开源,如何通过社区进行平衡

引子

今天在QQ群里面几位使用Ralasafe的人讨论:把ralasafe集成到自己的开发项目,但不敢对ralasafe进行改动。

就如何使用开源软件,又如何平衡自己的个性需求,很多人存在疑惑。就此BLOG,我简单谈谈自己的看法,供大家批评讨论。

我们应该这么做

个性化需求肯定要被实现——这点不能否认!实现方式有几种:

  1. 你认为该需求不够普遍,那么你就要自行实现。
    1. 可以稍微变通,使用开源的共用需求得到实现,然后自行定制部分代码(稍后谈如何定制代码)
  2. 你认为该需求非常普遍,应该集成到开源软件里面去。你应该这么做:
    1. 提交需求报告,ralasafe需求报告提交地址。当前通过该地址提交的需求大部分都被实现,当然他们是好需求
    2. 提交到社区,供社区讨论,呼吁更多社区呼声,尤其在开源软件发起人不大认可该需求的情况下,非常管用。人无完人,开源软件作者也是,你也是。所以,把问题公开,引起更多讨论
    3. 你如果能够提供解决方案的话,该需求实现速度会被加快。你也无意中对开源软件做了贡献,恭喜你!

如何自定制

这是个技术活,但我不大赞同采用完全的技术态度对待。从经济态度来看,使用开源软件你已经节约了很多成本,所以做些定制还是非常值得的。

一般情况下来说,如果是我来定制,我会采取这样的原则:

  1. 尽量不改动java程序代码,尤其是核心类代码。我更愿意自行编写新的类,采用组合、适配器等模式来实现新功能。最近在另外项目使用jsoup,我就是这么做的
  2. 页面/css等代码,我是非常大胆改动。ralasafe站点我就对theme大刀阔斧去干!
  3. 最后一点很重要:不要顾忌升级不兼容带来的痛苦,请享受写代码的快乐!

总之,你的需求要不自己实现,享受每次升级带来的麻烦和快乐;要不放入开源社区,供大家讨论,加入开源软件。只要社区活跃、社区方向不会变,所有讨论都会带来意想不到的好处!是的,我是相信了!

写的很没有技术性吧,哈哈,这就是我的文字风格~

Posted in 社区建设 | Tagged , | 6 Replies

[数据查询] 动态排序需求已经实现

Ralasafe爱好者BjFantasy通过SVN提交需求(编号3401119):

目前通过ralasafe的控制台,全部都是配置好的排序,不能动态排序,希望可以在CustomizedWhere里面,能够设置order by 条件,实现动态排序的功能。

此需求非常好。很多情况下,用户在界面点击列表的某个列进行排序,而不使用事先在查询策略里面定义好的排序。

此需求已经实现,并提交到SVN。我只修改org.ralasafe.entitle包里面的CustomizedWhere和Query代码就完成了。当CustomziedWhere带有order by 条件时,如果原查询策略里面没有order by条件,使用该order by条件;如果原查询策略里面有order by条件,原有的order by条件将在本次会话请求中被“屏蔽”,也就是不选用原有的order by条件。

以下是ralasafe demo示例:

在org.ralasafe.demo.servlet.EmployeeServlet里面添加如下代码,实现按照员工姓名增序。

1
2
3
4
CustomizedWhere where= new CustomizedWhere();
where.addAscOrderBy( "name" );
// Get employees that current user is permitted to view.
Collection employees = WebRalasafe.query(req, Privilege.QUERY_EMPLOYEE,where);

如果要实现逆序,使用:

1
where.addDescOrderBy( "name" );

如果要多列排序,继续调用add方法即可。如:

1
2
where.addAscOrderBy( "name" );
where.addDescOrderBy( "departmentId" );

注:和其他CustomizedWhere方法一样,传入的参数都是javabean属性,而不是数据库列名称。这样更好实践ORM,在业务层使用业务模型对话,而不是数据模型对话。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值