【问题标题】:Access Control for objects对象的访问控制
【发布时间】:2010-12-06 03:32:37
【问题描述】:

是否可以将类的功能仅限于某些对象(在 C++ 中)。这意味着,假设一个类中有 10 个方法,而这个类有 10 个对象。是否可以让 object1 和 object2 只访问 3 个函数。 Object3、object4、object5、object6 访问 6 个函数。 其余对象访问所有功能?

我正在尝试实施一个访问控制系统,一般用户只能看到一些有限的功能。 Previlaged 用户可以拥有更多访问权限,并且管理员可以访问所有功能。

一种方法是使用继承,如下所示:

类 PublicFeatures { 公开:

//在这里添加一些方法; };

类 ProtectedFeatures:public PublicFeatures { 公开:

// 在此处添加更多方法; };

类 AdminFeatures:public ProtectedFeatures { 公开:

// 在此处添加其余方法; };

在这种情况下,我们根据我们想要的访问级别来实例化三个类中的任何一个类的对象。但我在想的是只有一个类,并以某种方式限制对该特定对象的某些方法的访问。

有可能做这样的事情吗?还是我必须采用不同的方法来实施访问控制?

【问题讨论】:

    标签: c++


    【解决方案1】:

    类成员访问级别实际上与用户和安全限制没有任何关系。它们实际上只是编码结构,而不是您可以在运行时使用的东西。编译器在编译代码时将允许或阻止您调用函数。如果它编译你的程序可以运行,否则不能。没有任何有意义的方法可以添加任何类型的条件或应用程序逻辑。

    但我的想法是只有一个类,并以某种方式限制对该特定对象的某些方法的访问。

    是的,这就是你应该做的。该语言无济于事,但您可以自己保护对方法的调用。例如,如果用户不是管理员,甚至不要尝试调用管理方法。

    if (user.isAdministrator()) {
        securityLogs.archiveAndDelete();
    }
    else {
        throw SecurityException("You can't do that!");
    }
    

    【讨论】:

    • 这不是用户的问题。相对于“全球宣传”,这是一个“优先宣传”的问题。
    【解决方案2】:

    据我所知,没有。然而,这是面向方面编程研究的一部分。我在这本书中看到了你需要的东西:Aspect Oriented Software Development

    您面临的主要问题是对函数的“谁是调用者”缺乏了解。您可以通过要求每个调用者调用您的对象的方法来相处,并将this 作为一种关于自身的身份验证形式。远非完美,但使用此解决方案,您可以将每个方法包装在执行 ACL 的预方法中。

    另一种选择是声明你的实现类在方法方面完全私有,并定义一个“保镖”类,声明为第一个的朋友。保镖类代表调用者执行调用(由于朋友声明,这是唯一被授权执行的调用)。您仍然有身份验证的问题,并且您基本上是将整个目标类包装在其保镖对象后面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多