Delphi是否等同于Java的PermissionManager或AccessController类?

Leo*_*era 9 delphi delphi-xe

是否有任何类(免费,开源或商业)执行类似于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安全注释不完全相同),您就完成了.管理员稍后可以转到管理面板,并将该新处理程序的授予访问权限添加到组或单个用户.它只是有效.

这些是我目前的选择:

  1. TMS安全系统 -这似乎像一个完整的解决方案,有几个工具.值得研究.我接受这个作为答案,即使我可能不会这样做.
  2. 这看起来很有希望:Delphi虚拟方法拦截.它只适用于虚拟方法,但我认为这不太难以遵守.这个和注释可以成为一个有趣的系统(它似乎最初是为DataSnap身份验证而设计的)
  3. 在您的应用程序中只有一个ActionManager,并确保所有操作只能从那里启动.这样你就可以使用动作管理器OnExecute方法; 我假装使用该TAction.Name属性作为权限名称("处理程序"),从表中读取允许的操作列表.我可以使用动作管理器中的动作列表在管理界面中显示整个列表.

War*_* P 2

Delphi 还没有这样的框架,也没有像 EJB 这样适合它的概念。DELPHI 确实支持类注释,并且可以设计这样的框架,也许与 TAction 结合使用,以提供操作级别的安全性,但我怀疑这是否可以扩展到阻止特定的方法调用。Delphi 代码从不请求调用虚拟方法的权限。任何将自身注入到 Delphi 中的每个虚拟方法调用中的东西,在幕后添加 checkPermission 调用(在我看来)都是邪恶的。这会很慢,而且比手工写这样的支票更糟糕。

然而,用于 Mock delphi 类的相同技术将来也许可以用于创建一些自动安全包装对象。

我猜测,如果所讨论的 Java 库使用了方面(本质上是通过代码挂钩等技术实现的“注入”),那么它就不需要到处调用“CheckAllowed”。如果您不介意将所有方法调用更改为实现接口,然后提供执行方法调用的包装器,并在其周围使用某种自动生成的模拟安全包装器,则可以避免调用 CheckAllowed。

因此,这是一个谨慎的“不”,带有“未来可能的有限框架”条款。