yii2mod / yii2-rbac

RBAC Manager for Yii 2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Can't access module routes

opened this issue · comments

Hello. I am using advanced yii2 template + apache.

Main application address (for example localhost/) is targeting to @app/frontend/web/

Second application address (for example localhost/admin) is targeting to @app/backend/web/
(by apache's virtualhost alias).

I followed all guide steps, but seems that module is still not working.

@app/common/config/main.php:

<?php
return [
    'vendorPath' => dirname(dirname(__DIR__)) . '/vendor',
	'modules' => [
	    'rbac' => [
	        'class' => 'yii2mod\rbac\Module',
	    ],
	],
    'components' => [
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
	'authManager' => [
	    'class' => 'yii\rbac\DbManager',
	    'defaultRoles' => ['guest', 'user'],
	],
    ],
];

I added Yii's application modules dump in views files.
And rbac module in the list.
var_dump(\Yii::$app->modules);

localhost/rbac <- incorrect address 404
localhost/admin/rbac <- incorrect address 404

What's wrong? Thanks.

P.S: i think it's not important, but

$ php -v
PHP 7.1.7

Hi, Try to add this code to backend main.php configuration

'modules' => [
        'rbac' => [
            'class' => 'yii2mod\rbac\Module',
        ],
],

And check the following url - /rbac/assignment/index

Also check your routes configuration for backend application, here is my config

'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
                '<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
            ],
        ],

@igor-chepurnoi

Thanks for the answer, but i still can't open the module's pages.
Seems, that it is not a typical problem.

frontend main.php:

<?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);

return [
    'id' => 'app-frontend',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'controllerNamespace' => 'frontend\controllers',
	'modules' => [
		'rbac' => [
			'class' => 'yii2mod\rbac\Module',
		],
	],
    'components' => [
        'request' => [
            'csrfParam' => '_csrf-frontend',
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
        ],
        'session' => [
            // this is the name of the session cookie used for login on the frontend
            'name' => 'advanced-frontend',
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
		'urlManager' => [
			'enablePrettyUrl' => true,
			'showScriptName' => false,
			'rules' => [
				'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
				'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
			],
		],
    ],
    'params' => $params,
];

backend main.php:

<?php
$params = array_merge(
    require(__DIR__ . '/../../common/config/params.php'),
    require(__DIR__ . '/../../common/config/params-local.php'),
    require(__DIR__ . '/params.php'),
    require(__DIR__ . '/params-local.php')
);

return [
    'id' => 'app-backend',
    'basePath' => dirname(__DIR__),
    'controllerNamespace' => 'backend\controllers',
    'bootstrap' => ['log'],
	'modules' => [
		'rbac' => [
			'class' => 'yii2mod\rbac\Module',
		],
	],
    'components' => [
        'request' => [
            'csrfParam' => '_csrf-backend',
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-backend', 'httpOnly' => true],
        ],
        'session' => [
            // this is the name of the session cookie used for login on the backend
            'name' => 'advanced-backend',
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'errorHandler' => [
            'errorAction' => 'site/error',
        ],
		'urlManager' => [
			'enablePrettyUrl' => true,
			'showScriptName' => false,
			'rules' => [
				'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
				'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
			],
		],
		'urlManagerFrontend' => [
			'class' => \yii\web\UrlManager::class,
			'baseUrl' => '/',
			'enablePrettyUrl' => true,
			'showScriptName' => false,
			'rules' => [
				'<action:(.*)>' => '/site/<action>',
				'<module:\w+>/<controller:\w+>/<action:\w+>' => '<module>/<controller>/<action>',
			],
		],
    ],
    'params' => $params,
];

You don't need to add this module to frontend, add it only to backend configuration.

I will try to re-install your module this evening.
It's probably my fault, but i don't know where is it.

You can try to create own module in the backend app, and try to use it. Maybe you have some errors with your apache configuration

@igor-chepurnoi ok, will try later, thanks

The my main problem was an incorrect urlManager rule.
Incorrect rule: '<action:(.*)>' => 'site/<action>'
Correct rule: '<controller:\w+>/<action:\w+>' => '<controller>/<action>'

After this fix i got another error about translation.
Google said that i need to connect i18n module, so i did it.

The way to get working module:

  1. composer require
  2. add module to config
  3. add authManger to config
  4. fix urlManager rule
  5. add i18n to config
    'modules' => [
        'rbac' => [
            'class' => 'yii2mod\rbac\Module',
        ],
    ],
    'components' => [
        'urlManager' => [
            'baseUrl' => '/admin',
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            ],
        ],
        'authManager' => [
            'class' => 'yii\rbac\DbManager',
            'defaultRoles' => ['guest', 'user'],
        ],
        'i18n' => [
            'translations' => [
                'yii2mod.rbac' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    'basePath' => '@yii2mod/rbac/messages',
                ],
            ],
        ],
    ],

Ok, nice.