gpt4 book ai didi

delphi - Delphi 是否有相当于 Java 的 PermissionManager 或 AccessController 类?

转载 作者:行者123 更新时间:2023-12-03 14:44:33 26 4
gpt4 key购买 nike

是否有任何类(免费、开源或商业)可以执行类似于 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;
}
}

摘自文章:

In this example, the hello() method is accessible by everyone, and the bye() method is accessible by users of role javaee.

编辑:嗯,看来普遍的共识是这不能在 Delphi 中完成。其他人认为这是一个不好的方法。

我,我仍然认为这会很棒。我对 Java 注释的体验(作为图腾柱中的代码猴子)是积极的。添加一个新方法,添加某种形式的注释(与 Java 安全注释不完全相同),然后就完成了。管理员稍后可以转到管理面板,并向组或个人用户添加对此新处理程序的授予访问权限。它确实有效。

这些是我当前的替代方案:

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

最佳答案

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

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

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

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

关于delphi - Delphi 是否有相当于 Java 的 PermissionManager 或 AccessController 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9269403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com