Tajmin
Tajmin

Reputation: 405

Yii2 - RBAC Control Not working

I am trying to develop a yii2 app where members have two roles: admin and member. So, I was following the default role method as described in yii2 documentation.I have a table called 'member' in db which I'm using for login instead of the User.php model.

My web.php config file

 'authManager' => [
        'class' => 'yii\rbac\PhpManager',
        'defaultRoles' => ['admin', 'member'],
    ],
 'user' => [
            'identityClass' => 'app\models\Member',
            'enableAutoLogin' => true,
   ],

I created rbac folder in app directory and added UserGroupRule.php as shown below:

use Yii;
use yii\rbac\Rule;

/**
 * Checks if user group matches
 */
class UserGroupRule extends Rule
{
    public $name = '';

    public function execute($user, $item, $params)
    {
        if (!Yii::$app->user->isGuest) {
            $group = Yii::$app->user->identity->role;
            if ($item->name === 'admin') {
                return $group == 1;
            } elseif ($item->name === 'member') {
                return $group == 1 || $group == 2;
            }
        }
        return false;
    }
}

$auth = Yii::$app->authManager;

$rule = new \app\rbac\UserGroupRule;
$auth->add($rule);

$member = $auth->createRole('member');
$member->ruleName = $rule->name;
$auth->add($member);
// ... add permissions as children of $author ...

$admin = $auth->createRole('admin');
$admin->ruleName = $rule->name;
$auth->add($admin);
$auth->addChild($admin, $member);

As a part of testing, added this bit of code in one of the controllers:

'access' => [
     'class' => AccessControl::className(),
      'only' => ['index', 'view', 'create', 'update', 'delete'],
      'rules' => [
            [
                //'actions' => ['admin'],
                'allow' => true,
                'roles' => ['admin'],
            ],
        ], 
 ],

Problem is, it gives me Forbidden (#403) error even when I try to access one of the actions(i.e. index) as an admin. So, whats am I missing? Please help!

P.S. As mentioned, I'm using db for login. If you want, take a look at member.php model.

Upvotes: 1

Views: 1982

Answers (1)

Tajmin
Tajmin

Reputation: 405

I found my answer. It worked finally ! Seemed like there was something with the cache. After restarting the browser and PC, it worked.

Upvotes: 0

Related Questions