I try to add a new role programmatically using this code :
<?php
namespace ModuleNameSpace\YourModuleName\Setup;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
/* For get RoleType and UserType for create Role */;
use Magento\Authorization\Model\Acl\Role\Group as RoleGroup;
use Magento\Authorization\Model\UserContextInterface;
/** * @codeCoverageIgnore */
class InstallData implements InstallDataInterface {
/** * RoleFactory * * @var roleFactory */
private $roleFactory;
/** * RulesFactory * * @var rulesFactory */
private $rulesFactory;
/** * Init * * @param \Magento\Authorization\Model\RoleFactory $roleFactory * @param \Magento\Authorization\Model\RulesFactory $rulesFactory */
public function __construct(
\Magento\Authorization\Model\RoleFactory $roleFactory, /* Instance of Role*/
\Magento\Authorization\Model\RulesFactory $rulesFactory /* Instance of Rule */
/*this define that which resource permitted to wich role */ ) {
$this->roleFactory = $roleFactory;
$this->rulesFactory = $rulesFactory;
}
/** * {@inheritdoc} * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */
public function install(
ModuleDataSetupInterface $setup,
ModuleContextInterface $context) {
/** * Create Warehouse role */
$role=$this->roleFactory->create();
$role->setName('YourRoleName') //Set Role Name Which you want to create
->setPid(0) //set parent role id of your role
->setRoleType(RoleGroup::ROLE_TYPE)
->setUserType(UserContextInterface::USER_TYPE_ADMIN);
$role->save();
/* Now we set that which resources we allow to this role */ $resource=[
'Magento_Backend::admin',
'Magento_Sales::sales'
];
/* Array of resource ids which we want to allow this role*/
$this->rulesFactory->create()->setRoleId($role->getId())->setResources($resource)->saveRel();
}
}
and I run the setup:upgrade
command, but when I go to the User roles I can't found it.
PS: my module setup is '0.0.0.1'
is there any solution?