背景(虽然我的问题可以概括):我想整合Mongo核心类 PhpRbac (基于角色的身份验证)添加额外的安全层以限制对特定数据库和集合的访问。例如如果代码尝试访问集合“dbname.foo.bar.baz”,它将检查是否存在 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 语句,而不是在调用它的位置:
use \MyUniqueNameSpace\MongoDB;
关于PHP:通过核心类/函数强制使用不同命名空间中的扩展类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948066/