Back to Top

Magento 2- How to create user role programmatically by custom module installer

Updated 21 February 2024

Here we create admin user role programmatically by custom module installer with specific resources.

1=>First you need to create an installer file named InstallData.php in our custom module Setup folder

complete path: app/code/ModuleNameSpace/YourModuleName/Setup

<?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',
					'Magento_Sales::create',
					'Magento_Sales::actions_view', //you will use resource id which you want to allow
					'Magento_Sales::cancel'
				  ];
        /* Array of resource ids which we want to allow this role*/
        $this->rulesFactory->create()->setRoleId($role->getId())->setResources($resource)->saveRel();
    }
}

You can get resources id as explain in following snap
ACL

After adding these files install your custom module in your magento2 instance

then by terminal run the following command in your magento2 root directory

php bin/magento setup:upgrade

Now  your admin user role created  you can check it from System > Permission > User Role as follows 🙂

Selection_057
Selection_058
. . .

Leave a Comment

Your email address will not be published. Required fields are marked*


2 comments

  • Nakka Gangaram
    • Kartik Upadhyay (Moderator)
  • Back to Top

    Message Sent!

    If you have more details or questions, you can reply to the received confirmation email.

    Back to Home