对于我正在编写的插件系统,我需要编写一个数据库API。但我想限制数据库访问,因此插件无法看到其他表,而不是通过特定函数创建的表。我如何启用插件来使用SQL,但不能同时为它们提供完全访问权限?
这是一些代码,它可能不起作用,但它显示了它背后的想法:
class Api_Database {
private $pluginid;
function __construct($pluginid) {
$this->pluginid = $pluginid;
}
function query($sql, $tablename) {
$db = new Sys_Database;
$db->query(str_replace('{table}', $pluginid.$tablename, $sql));
}
}
我在这里思考正确的方向吗?你会如何创建这样一个系统,只是更安全?
答案 0 :(得分:0)
我们的想法是创建一个表,其中包含链接到用户的已创建表的列表...
类似的东西:
privileges
user_id
table_name
并在您的查询中
SELECT FROM privileges WHERE user_id = '{user_id}' and table_name = '{table}';
检查行是否存在。如果是,用户有权使用该表!
class Api_Database {
private $pluginid;
function __construct($pluginid) {
$this->pluginid = $pluginid;
}
function query($sql, $tablename) {
$hasPrivilege = $this->checkPrivileges($tablename, $userid);
if(!$hasPrivilege) return false; //for example
$db = new Sys_Database;
$db->query(str_replace('{table}', $pluginid.$tablename, $sql));
}
function checkPrivileges($table, $user_id) {
$db = new Sys_Database;
$result = $db->query('SELECT id FROM privileges WHERE user_id = "'.$user_id.'" AND table_name = "'.$table.'"');
return ($result && $result->num_rows);
}
}
修改强>
因此,如果我理解正确,您使用PHP插件来访问SQL数据,但您不能或不想更改它。 你也不能'添加SQL用户,你不想限制PHP Dev通过PHP在某些表中进行一些查询?哼......不可能!
因为为了能够禁止数据库表访问,你需要操作PHP或MYSQL用户...
或者,如果我错了,抱歉,很难跟着你!