对象的访问控制

时间:2009-10-12 22:16:55

标签: c++

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

我正在尝试实现一个访问控制系统,一般用户只能看到一些有限的功能。普遍存在的用户可以获得更多访问权限,管理员可以访问所有功能。

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

类PublicFeatures {     公共:

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

class ProtectedFeatures:public PublicFeatures {    公共:

//在这里添加更多方法; };

类AdminFeatures:public ProtectedFeatures {    公共:

//在这里添加其他方法; };

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

有可能做这样的事吗?或者我必须采用不同的方法来实现访问控制?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

  

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

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

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