Yii2框架中的逐步认证和授权(基本模板)

时间:2017-04-28 07:32:15

标签: php authentication yii2 authorization yii2-basic-app

我搜索过网络,我得到的唯一结果就是大量的理论。 我厌倦了理解Yii2 Framework中的身份验证和授权的概念, 我已经在yii2中学习了认证的概念,并且已经完成了yii2框架的整个文档。我需要了解yii2中auth的实现,我是新手,有人可以在Yii2中给我一步一步的认证和授权过程框架。 这样我的应用程序就可以识别登录用户并将其定向到特定页面。 我的应用程序有四种用户: 管理员,审批人,金融家和简单用户 我希望他们在成功登录后转到各自的页面。

1 个答案:

答案 0 :(得分:0)

之前我遇到过相同的问题,只需一次,并使用all作为模板,任何方式都需要登录,注册,密码重置,电子邮件发送。这意味着不是一个小话题。

创建表格只需粘贴

CREATE TABLE IF NOT EXISTS `auth_assignment` (
  `item_name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `user_id` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `created_at` int(11) DEFAULT NULL,
  PRIMARY KEY (`item_name`,`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE IF NOT EXISTS `auth_item` (
  `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `type` int(11) NOT NULL,
  `description` text COLLATE utf8_unicode_ci,
  `rule_name` varchar(64) COLLATE utf8_unicode_ci DEFAULT NULL,
  `data` text COLLATE utf8_unicode_ci,
  `created_at` int(11) DEFAULT NULL,
  `updated_at` int(11) DEFAULT NULL,
  PRIMARY KEY (`name`),
  KEY `rule_name` (`rule_name`),
  KEY `idx-auth_item-type` (`type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE IF NOT EXISTS `auth_item_child` (
  `parent` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `child` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`parent`,`child`),
  KEY `child` (`child`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


CREATE TABLE IF NOT EXISTS `auth_rule` (
  `name` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
  `data` text COLLATE utf8_unicode_ci,
  `created_at` int(11) DEFAULT NULL,
  `updated_at` int(11) DEFAULT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(300) NOT NULL,
  `password` varchar(300) NOT NULL,
  `authKey` varchar(300) NOT NULL,
  `accessToken` varchar(300) NOT NULL,
  `email` varchar(300) NOT NULL,
  `money` float NOT NULL,
  `podpis` varchar(300) NOT NULL,
  `pechat` varchar(300) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=18 ;

ALTER TABLE `auth_assignment`
  ADD CONSTRAINT `auth_assignment_ibfk_1` FOREIGN KEY (`item_name`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE `auth_item`
  ADD CONSTRAINT `auth_item_ibfk_1` FOREIGN KEY (`rule_name`) REFERENCES `auth_rule` (`name`) ON DELETE SET NULL ON UPDATE CASCADE;

ALTER TABLE `auth_item_child`
  ADD CONSTRAINT `auth_item_child_ibfk_1` FOREIGN KEY (`parent`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `auth_item_child_ibfk_2` FOREIGN KEY (`child`) REFERENCES `auth_item` (`name`) ON DELETE CASCADE ON UPDATE CASCADE;

修改您的User.php模型例如:https://bitbucket.org/Asylzat/biznen/src/05007642a67ec5788d8a8e1fcba0020a099f8a6b/models/User.php?at=master&fileviewer=file-view-default

和控制器登录和注册,我在一个页面中使用。并且还要查找actionIndex的注释部分,我用它来创建角色。

https://bitbucket.org/Asylzat/biznen/src/05007642a67ec5788d8a8e1fcba0020a099f8a6b/controllers/SiteController.php?at=master&fileviewer=file-view-default

要拒绝访问页面,请使用行为

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['index', 'update', 'view', 'delete'],
                    'allow' => true,
                    'roles' => ['admin'],
                ],
            ],
        ],

这里是admin可以访问已定义的页面

对于代码的一部分,使用

if (isset(Yii::$app->authManager->getRolesByUser(Yii::$app->user->getId())['admin'])) echo "do something";

并在此处查找教程https://www.youtube.com/watch?v=eFOIUeU-Y74&index=18&list=PLRd0zhQj3CBmusDbBzFgg3H20VxLx2mkF

希望这会有所帮助:)