【发布时间】:2012-03-05 09:06:03
【问题描述】:
是否有任何类(免费、开源或商业)执行类似于 Java 的 AccessController 所做的访问控制?我想创建一组可以在运行时更改的动态策略。
但是,我想避免编写代码
if Allowed( ... ) then
到处都是。我知道我可能需要调整我的程序类层次结构,但我更喜欢这样做,而不是在所有地方手动添加警卫。
如果没有现成的代码,那么明智的做法是什么? RTTI?
编辑:这是来自Security Annotations and Authorization in GlassFish and the Java EE 5 SDK 文章的示例。由于有人在评论中提到了注释,我认为这是理想的:
@Stateless
@RolesAllowed("javaee")
public class HelloEJB implements Hello {
@PermitAll
public String hello(String msg) {
return "Hello, " + msg;
}
public String bye(String msg) {
return "Bye, " + msg;
}
}
来自文章:
在本例中,hello() 方法可供所有人访问,而 bye() 方法可供角色 javaee 的用户访问。
编辑: 好吧,似乎普遍的共识是这不能在 Delphi 中完成。其他人认为这是一种不好的方法。
我,我仍然认为这会很棒。我在 Java 中的注释(作为图腾柱中的代码猴子)的经验是积极的。添加一个新方法,添加某种形式的注释(与 Java 安全注释不完全相同),然后就完成了。管理员稍后可以转到管理面板并将对该新处理程序的授予访问权限添加到组或个人用户。它只是工作。
这些是我目前的选择:
- TMS Security System - 这似乎是一个完整的解决方案,包含多个工具。值得研究。我接受这个作为答案,即使我可能不会这样做。
- 这看起来很有希望:Delphi virtual method interception。它只适用于虚拟方法,但我认为这并不难遵守。这和注释可以组成一个有趣的系统(看起来这最初是为 DataSnap 身份验证而设计的)
- 在您的应用程序中只有一个 ActionManager,并确保所有操作只能从那里启动。这样就可以使用动作管理器
OnExecute方法;我假装使用TAction.Name属性作为权限名称(“处理程序”),从表中读取允许操作的列表。我可以使用操作管理器中的操作列表在管理 UI 中显示整个列表。
【问题讨论】:
-
我认为你可以通过使用属性来实现类似的功能(如果我错了,请不要把我钉在十字架上......)这里有几个链接:robstechcorner.blogspot.com/2009/09/…delphi.about.com/od/oopindelphi/a/…stackoverflow.com/questions/2657502/…
-
@DorinDuminica - 可以收集注释并将其放入列表中以便我可以将它们分配给特定角色吗?
-
你能提供一些关于 Delphi 代码应该是什么样子的示例代码吗?你说你不想做
if Allowed(...) then,但链接文档中的第一个 Java 示例是inheritedContext.checkPermission(permission);- 这在我的书中大致相同。 -
@CosminPrund - 我用一个例子编辑了我的问题。