Acegi的权限控制,掌握点皮毛了,但是实例级权限控制还是不会配置。看了些资料,acegi用ACL来控制实例级的访问权限,但仍然无法避免在DAO层次上的侵入性。而且自己觉得,对于数据量比较大的数据库,维护ACL也不是件轻松的事。权限控制信息可以放在数据库中,但是这些控制信息肯定是基于一定规则产生的,这个规则应该写在哪?没有contact类的源代码,没办法分析。
现在有个想法,不知道能不能通过使用java规则引擎来实现实例级权限控制。现在还想不到如何避免侵入性,但应该可以实现实例级权限控制的可配置吧。
=======================================
细粒度的权限控制实在是个很令人头痛的问题。acegi可以提供非常好的粗粒度权限控制能力。acegi也提供了实例级上的对域对象控制能力,但使用起来很麻烦,也无法避免侵入性问题,还要维护额外的表。另外,它无法提供对URL访问,页面元素显示这样的细粒度层次上的权限控制。现在考虑是不是不采用acegi控制细粒度的权限。
简单的替代方案就是直接写在业务逻辑中,但不符合我一向追求的业务逻辑与权限控制逻辑解藕的目标。现在有点想用规则引擎来解决这个问题,规则引擎是配置性的,方便修改。当然直接使用规则引擎可以把细粒度权限规则抽取到配置文件中,但无法避免侵入性。不知道可不可以通过AOP再来解决侵入性问题。