2013-05-29 70 views
1

我正在为opencart编写一个模块/插件,并且自动创建用户组权限会很好。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

我也注意到,用户组模型没有卸载模块后删除权限的功能...我是否必须自己从控制器中删除权限? –

+0

https://github.com/opencart/opencart/pull/693 –

回答

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'); 
} 
+0

我没有创建它作为一个模块。我正在使用我自己的控制器类型。 –

+0

我正在使用我自己的控制器类型。如果控制器没有权限运行,opencart如何在模块页面中运行此功能? –

1

在任何情况下,您需要创建一个模块来添加权限。

我的解决办法是 文件 - 控制器/模块/ 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'; 
?> 

以及通过连线去/管理/指数。 PHP→路线=扩展/模块/安装&令牌= &延长= test_import

1

通常你安装的模块/ EX从模块概述内的张力,所以在管理 - >扩展 - >模块。在这里用户必须具有modify的权限才能安装/卸载/修改模块,extension/modules

现在如果您的分机的控制器有install方法,它将从admin/controller/extension/module.php::install()方法中调用。无论如何,你不需要添加的权限手动,因为他们已经被提到的方法添加(检查线115-118 admin/controller/extension/module.php):

 $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的标准,或者我们不是在谈论扩展/模块然后...

+0

如果我必须创建模型,该怎么办?模型文件夹下没有模块文件夹... –

+0

@FábioSilva这不是一个问题 - 只需创建一个这样的文件夹并加载你的模型,像'$ this-> model-> load('module/mymodel');'。然后像使用其他模型一样使用它:'$ this-> model_module_mymodel-> someMethod();'。 – shadyyx