2009-10-12 93 views
2

是否可以将类的功能仅限于某些对象(使用C++)。那将意味着什么,假设一个班有10个方法,而这个班有10个对象。 object1是否可以访问3个函数。对象3,对象4,对象5,对象6访问6个函数。 和其他对象访问所有功能?对象的访问控制

我试图实现访问控制系统,其中一般用户只能看到一些有限的功能。以前的用户可以拥有更多的访问权限,并且管理员可以访问所有功能。

一种方法是使用继承,像这样:

类PublicFeatures { 市民:

//这里补充一些方法; };

类ProtectedFeatures:公共PublicFeatures { 市民:

//这里补充一些更多的方法; };

类AdminFeatures:公共ProtectedFeatures { 市民:

//添加此方法的休息; };

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

是否有可能做这样的事情?或者我必须遵循不同的方法来实施访问控制?

回答

1

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

您面临的主要问题是缺乏有关功能“谁是调用者”的知识。你可以通过要求每个调用者调用你的对象的方法来传递this作为一种认证形式。远非完美,但通过此解决方案,您可以将每个方法包装在执行ACL的预方法中。

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

0

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

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

是的,这就是你应该做的。语言不会帮助,但你可以自己防止对方法的调用。如在中,如果用户不是管理员,则甚至不尝试调用管理方法。

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

这不是用户的问题。这是关于“全球宣传”的“首选宣传”问题。 – 2009-10-12 22:28:19