Yii2 最简单的实现管理员才能登录后台
来源:互联网 发布:掌中宝是什么软件 编辑:程序博客网 时间:2024/05/22 00:25
场景
有时候一个小项目,想实管理员才能登录后台,其实没必要引入复杂的 RBAC,可以利用 Yii User 表里面的 role
字段来实现这个效果。
实战:后台只有管理员才能登录
第一步:修改 common\models\User
文件,添加如下静态常量:
const ROLE_USER = 10;const ROLE_ADMIN = 20;
第二步:修改 common\models\User
文件,修改 rules
规则:
['role', 'default', 'value' => 10],['role', 'in', 'range' => [self::ROLE_USER, self::ROLE_ADMIN]],
第三步:修改 common\models\User
文件,添加判断是否是超级管理员的 isUserAdmin
静态方法:
/** * @param $username * @return bool */public static function isUserAdmin($username){ if (static::findOne(['username' => $username, 'role' => self::ROLE_ADMIN])) { return true; } else { return false; }}
第四步:修改 common\models\LoginForm
文件,添加 loginAdmin
方法:
/** * @return bool */public function loginAdmin(){ if ($this->validate()) { if (User::isUserAdmin($this->username)) { return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0); } $this->addError('username', 'You don\'t have permission to login.'); } else { $this->addError('password', Yii::t('app', 'Incorrect username or password.')); } return false;}
第五步:修改 backend\controllers\SiteController.php
, 修改 actionLogin
方法:
把 $model->login()
改成 $model->loginAdmin()
。
public function actionLogin(){ if (!\Yii::$app->user->isGuest) { return $this->goHome(); } $model = new LoginForm(); if ($model->load(Yii::$app->request->post()) && $model->loginAdmin()) { return $this->goBack(); } else { return $this->render('login', [ 'model' => $model, ]); }}
第六步:未登录用户只能访问登录页面
实现方式一:新建 backend\controllers\Controller.php
文件,代码如下:
除了 SiteController
其他控制器都要继承此控制器,方可实现我们最终效果,切换其他控制器要使用 behaviors
的时候记得要ArrayHelper::merge
父类 behaviors
。
<?php/** * author : forecho <caizh@chexiu.cn> * createTime : 2016/3/10 14:39 * description: */namespace backend\controllers;use yii\filters\AccessControl;class Controller extends \yii\web\Controller{ public function behaviors() { return [ // 后台必须登录才能使用 'access' => [ 'class' => AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['@'], ], ], ], ]; }}
实现方式二:新建 common\components\AccessControl.php
文件,代码如下:
<?php/** * author : forecho <caizhenghai@gmail.com> * createTime : 16/8/14 下午10:38 * description: */namespace common\components;use Yii;use yii\web\User;use yii\di\Instance;class AccessControl extends \yii\base\ActionFilter{ /** * @var User User for check access. */ private $_user = 'user'; /** * Get user * @return User */ public function getUser() { if (!$this->_user instanceof User) { $this->_user = Instance::ensure($this->_user, User::className()); } return $this->_user; } /** * Set user * @param User|string $user */ public function setUser($user) { $this->_user = $user; } /** * @inheritdoc */ public function beforeAction($action) { $user = $this->getUser(); return $this->denyAccess($user); } /** * @param User|string $user * @return bool */ protected function denyAccess($user) { if ($user->getIsGuest()) { $user->loginRequired(); } return true; } /** * @param \yii\base\Action $action * @return bool */ protected function isActive($action) { $uniqueId = $action->getUniqueId(); if ($uniqueId === Yii::$app->getErrorHandler()->errorAction) { return false; } $user = $this->getUser(); if ($user->getIsGuest() && is_array($user->loginUrl) && isset($user->loginUrl[0]) && $uniqueId === trim($user->loginUrl[0], '/')) { return false; } return true; }}
修改 `` 配置文件,添加代码:
'as access' => [ 'class' => 'common\components\AccessControl',],'components' => [ // ···],
本文由 forecho 创作,出自https://getyii.com/topic/585。
0 0
- Yii2 最简单的实现管理员才能登录后台
- SpringSecurity实现后台管理员登录(二)
- 学习记录—yii2简单的登录功能实现
- yii2.0 最简单rbac实现方法
- 最简单的登录验证(js实现)
- PHP实现最简单的登录注册
- SSM实现最简单的登录验证
- 登录防注入最简单的实现
- yii2,简单的留言板前段到后台
- Spring Security实现后台管理员登录(一)
- 最简单的yii2安装教程
- 解决Discuz!与UCenter后台管理员不能登录的bug
- Discuz! X3.2后台管理员登录不了的问题
- DISCUZ!论坛管理员无法登录后台的各种解决方法总结
- yii框架下的后台管理员登录操作
- yii2通用后台实现
- Flask-login 简单 Demo, 最简单的实现登录方法
- DEDECMS管理员后台登录前台不登录
- 数据结构与算法(17)——二叉树遍历
- 快乐&&平凡的专栏
- JVM(十) 命名空间
- JAVA环境变量和TOMCAT服务器配置
- Chapter11——分别声明Teacher(教师类)和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)类。
- Yii2 最简单的实现管理员才能登录后台
- wamp初配置
- ANDROID中ACTIVITY处理返回结果的实现方式
- Gdiplus读取PND1
- PLSQL 中文乱码解决
- vi/vim命令模式和编辑模式各种操作
- HDOJ--2700 Parity
- 腾讯云CentOS6.5下安装mysql,并配置好远程访问等权限,途中遇到的问题
- 30 Examples For Awk Command In Text Processing