首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于访问角色的yii2重定向以更改密码页面

基于访问角色的yii2重定向以更改密码页面
EN

Stack Overflow用户
提问于 2016-10-01 02:27:34
回答 2查看 492关注 0票数 0

我在Yii2应用程序中设置了简单的基于角色的访问,其工作方式如下所示:

代码语言:javascript
复制
public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'ruleConfig' => [
                   'class' => AccessRule::className(),
               ],
               'only' => ['logout', 'contact', 'change-password'],
               'rules' => [
                [
                    'actions' => ['login'],
                    'allow' => true,
                    'roles' => ['?'],
                ],
                [
                    'actions' => ['logout', 'contact', 'change-password'],
                    'allow' => true,
                    'roles' => [
                        User::ROLE_USER,
                        User::ROLE_ADMIN
                    ],
                ],
                [
                    'actions' => ['logout', 'change-password'],
                    'allow' => true,
                    'roles' => [
                        User::ROLE_NEW_USER
                    ],
                ],
            ],
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['post'],
            ],
        ],
    ];
}

当用户未登录时,尝试访问注销、联系人或更改密码页面将重定向到登录页面。我还想对此进行配置,以便具有角色ROLE_NEW_USER的用户始终被重定向到更改密码页面,直到他们的状态发生更改(密码更改时,数据库中的状态会随之更新)。

使用denyCallback可以做到这一点吗?或者有没有一种方法可以使用重定向到登录页面来重定向到其他页面?

EN

回答 2

Stack Overflow用户

发布于 2016-10-02 23:25:45

如文档中所示:

访问规则支持许多选项。您还可以扩展 以创建您自己的自定义访问规则类

这允许您创建自定义规则,检查用户是否已更改密码并重定向到您想要的任何位置

票数 0
EN

Stack Overflow用户

发布于 2016-10-04 23:44:35

好的,经过一番折腾之后,我设法让它与beforeAction()函数一起工作:

代码语言:javascript
复制
public function beforeAction($action)
{
        if (Url::current() != Url::toRoute('site/change-password') 
            && isset(Yii::$app->user->getIdentity()->role) 
            && Yii::$app->user->getIdentity()->role == User::ROLE_NEW_USER) {
            return Yii::$app->getResponse()->redirect(Url::toRoute('site/change-password'));
        }

        if (!parent::beforeAction($action)) {
            return false;
        }

        return true; 
}

确保包含Url::current() != Url::toRoute('site/change-password'),否则将进入重定向循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39797852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档