权限管理讨论(新)

代文龙整理的"权限系统概要"写得很详尽。现在想讨论一下实现过程中的问题:
1.怎么在系统中表示一个Resource呢?
在"概要"中提到了使用Id标识一个Resource。我觉得也可以理解为将一个划分较细的use case作为权限分配的单位。相应地,可以把session bean中的一个business method作为该use case的实现。但怎么给这个business method分配resource Id,并让权限系统在验证的过程中识别本business method所对应的resource Id?
此前我在一个项目中是将struts的action作为权限分配的单位。但之后发现实在行不通。

2.菜单权限和功能权限如何统一起来?
曾做过另一个项目,是以菜单权限作为权限管理的单位,问题变成了如果用户知道了交互协议,则可以绕过菜单直接构造请求包给后台。安全问题大大的。

1.怎么在系统中表示一个Resource呢?

我的想法是 Resource/Role 都是 Service specify 的。怎么说呢?不同的应用,应该有自己特有的一些资源和角色。所以,Resource 和 Role 实际上是Service相关的。

Resource 推广开来,可以说是任何的对象,用Java来描述,就是 java.lang.Object. 那么 Resource 应该怎么样获得呢? 我现在能想到的,就是使用不同的 ResourceFactory. 可以在一个Service 里注册很多的 ResourceFactory, 当需要一个 Resource 时,可以通过 ResourceFactory 来获取。

2.菜单权限和功能权限如何统一起来?
你的问题看起来是没有在后台做进一步的控制。如果要做得比较严格一点,应该在后台的每一步重要操作,都做 Log 与权限判断。如果你使用 Model2 模型,实现了 FrontController 的话,可以在 FrontController 里做这样的权限控制,这样实现起来会简单一些。