后台(虽然我的问题可以推广):我想将Mongo核心类与PhpRbac(基于角色的身份验证)集成,以添加额外的安全层来限制对特定数据库的访问和收藏品。例如如果代码尝试访问集合“dbname.foo.bar.baz”,它将检查是否存在PhpRbac权限“/ mongo / dbname / foo / bar / baz”并确保当前用户具有权限。
我想强制核心MongoClient::selectDB()
函数返回MongoDB
的扩展版本而不是通常的核心MongoDB
。
e.g。
(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与其他功能集成时会遇到的一般问题。
感谢您的帮助:)
答案 0 :(得分:0)
您应该在MongoClient类中添加以下use语句,而不是在您调用它的位置:
use \MyUniqueNameSpace\MongoDB;