是否有任何类(免费,开源或商业)执行类似于Java的AccessController的访问控制?我想创建一组可在运行时更改的动态策略.
但是,我想避免编码
if Allowed( ... ) then
Run Code Online (Sandbox Code Playgroud)
到处都是.我知道我可能需要调整我的程序类层次结构,但我更喜欢它而不是手动添加整个地方的警卫.
如果没有现成的代码,那么什么是合理的方法呢?RTTI?
编辑:以下是GlassFish中的安全注释和授权以及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;
}
}
Run Code Online (Sandbox Code Playgroud)
来自文章:
在此示例中,每个人都可以访问hello()方法,角色javaee的用户可以访问bye()方法.
编辑: 嗯,似乎普遍的共识是,这不能在Delphi中完成.其他人认为这是一个糟糕的方法.
我,我仍然认为这会很棒.我在Java中使用Annotations的经验(作为图腾柱中的代码猴子)是积极的.您添加了一个新方法,添加了某种形式的注释(与Java安全注释不完全相同),您就完成了.管理员稍后可以转到管理面板,并将该新处理程序的授予访问权限添加到组或单个用户.它只是有效.
这些是我目前的选择:
OnExecute方法; 我假装使用该TAction.Name属性作为权限名称("处理程序"),从表中读取允许的操作列表.我可以使用动作管理器中的动作列表在管理界面中显示整个列表.War*_* P 2
Delphi 还没有这样的框架,也没有像 EJB 这样适合它的概念。DELPHI 确实支持类注释,并且可以设计这样的框架,也许与 TAction 结合使用,以提供操作级别的安全性,但我怀疑这是否可以扩展到阻止特定的方法调用。Delphi 代码从不请求调用虚拟方法的权限。任何将自身注入到 Delphi 中的每个虚拟方法调用中的东西,在幕后添加 checkPermission 调用(在我看来)都是邪恶的。这会很慢,而且比手工写这样的支票更糟糕。
然而,用于 Mock delphi 类的相同技术将来也许可以用于创建一些自动安全包装对象。
我猜测,如果所讨论的 Java 库使用了方面(本质上是通过代码挂钩等技术实现的“注入”),那么它就不需要到处调用“CheckAllowed”。如果您不介意将所有方法调用更改为实现接口,然后提供执行方法调用的包装器,并在其周围使用某种自动生成的模拟安全包装器,则可以避免调用 CheckAllowed。
因此,这是一个谨慎的“不”,带有“未来可能的有限框架”条款。