背景(尽管我的问题可以概括):我想将Mongo核心类与PhpRbac(基于角色的身份验证)集成,以添加额外的安全层,以限制对特定数据库和集合的访问。例如,如果代码试图访问集合"dbname.foo.bar。它将检查PhpRbac权限是否存在"/mongo/dbname/foo/bar/baz",并确保当前用户具有该权限。
我想强制核心MongoClient::selectDB()
函数返回MongoDB
的扩展版本,而不是像通常那样返回核心MongoDB
。
。
(1)定义MongoDB
的扩展版本
namespace MyUniqueNamespace;
class MongoDB extends 'MongoDB {
public function __construct(){
die("We're definitely using the extended version!");
}
public function someStandardFunction(){
authoriseOrThrowException();
return parent::someStandardFunction();
}
}
(2)强制核心MongoClient
(不修改它)使用'MyUniqueNameSpace'MongoDB
而不是MongoDB
。使用use
或use ... as MongoDB
不能达到这个目的:(
use 'MyUniqueNameSpace'MongoDB;
$cl = new MongoClient();
$db = $cl->selectDB("dbname"); //would die if it was using the extended function
谁能提出一种实现这一目标的方法?PHP不能转换为一个不同的类,我不想开始重写Mongo类,因为这是我在将PhpRbac与其他功能集成时将面临的一个普遍问题。
谢谢你的帮助
您应该在您的MongoClient类中添加以下使用语句,而不是在调用它的地方:
use 'MyUniqueNameSpace'MongoDB;