我正在为opencart编写模块/插件,自动创建用户组权限会很不错。
安装模块后,用户必须进入用户权限控制并手动添加权限。这是一个不必要的步骤,跳跃会非常好。
由于我目前正在使用VqMod进行一些更改(比如在管理菜单中添加额外的项目),因此可以将路由添加到权限控制类中的忽略路由列表,但我不认为这是一个不错的选择,我更喜欢插入权限,如果可能的话。
我尝试在构造函数中使用user_group模型添加权限,但是将其添加到我的构造函数中不起作用。该类可能在获得许可之前未被实例化。
$this->load->model('user/user_group');
$this->model_user_user_group->addPermission($this->user->getId(), 'access', 'test/import');
$this->model_user_user_group->addPermission($this->user->getId(), 'modify', 'test/import');
答案 0 :(得分:1)
此代码应放在控制器的install()
方法中。当您的mod安装在管理员区域的EXTENSIONS > MODULES
下时,将运行此操作。只需将其添加到您的控制器,它应该工作(未经测试)
protected function install() {
$this->load->model('user/user_group');
$this->model_user_user_group->addPermission($this->user->getId(), 'access', 'test/import');
$this->model_user_user_group->addPermission($this->user->getId(), 'modify', 'test/import');
}
答案 1 :(得分:1)
在任何情况下,您都需要创建一个模块来添加权限。
我的解决方案是 file - controller / module / test_import.php
<? php class ControllerModuleTestimport extends Controller {
public function index() {
$this->redirect($this->url->link('test/import', 'token=' . $this->session->data['token'], 'SSL'));
}
public function install() {
$this->load->model('user/user_group');
$this->model_user_user_group->addPermission($this->user->getId(), 'access', 'test/import');
$this->model_user_user_group->addPermission($this->user->getId(), 'modify', 'test/import');
}
} ?>
/language/english/module/test_import.php
<?php
// Heading
$_['heading_title'] = 'test_import';
?>
通过链接/admin/index.php?route=extension/module/install&token=&extension=test_import
答案 2 :(得分:1)
通常您可以在模块概述中安装模块/扩展,因此在ADMIN - &gt;下扩展程序 - &gt;模块。在这里,用户必须拥有modify
extension/modules
的权限才能安装/卸载/修改模块。
现在,如果您的扩展程序的控制器具有install
方法,则会从admin/controller/extension/module.php::install()
方法中调用它。无论如何,您不需要手动添加权限,因为它们已经通过上述方法添加(检查 admin/controller/extension/module.php
的第115-118行):
$this->load->model('user/user_group');
$this->model_user_user_group->addPermission($this->user->getId(), 'access', 'module/' . $this->request->get['extension']);
$this->model_user_user_group->addPermission($this->user->getId(), 'modify', 'module/' . $this->request->get['extension']);
因此恕我直言,如果将新模块放置在OC的模块中并以正常方式安装,则无需任何操作。如果没有(所以它放在其他地方)我猜你错过了一些东西或者你没有遵循OC的标准,或者我们不是在谈论扩展/模块......