【问题标题】:Step By step Authentication and Authorization in Yii2 Framework (Basic Template)Yii2框架中的逐步认证和授权(基本模板)
【发布时间】:2017-04-28 07:32:14
【问题描述】:

我在网上搜索过,我得到的唯一结果就是大量的理论。 Yii2框架中的认证和授权的概念我看腻了, 学了yii2中认证的概念,也通读了yii2框架的全部文档,需要了解yii2中auth的实现,我是新手,谁能给我一步一步的Yii2中的认证和授权过程框架。 这样我的应用程序就可以识别登录用户并将他们定向到特定页面。 我的应用程序有四种用户: 管理员、审批者、金融家和简单用户 我希望他们在成功登录后转到各自的页面。

【问题讨论】:

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


    【解决方案1】:

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

    创建表格只需粘贴即可

    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'],
                    ],
                ],
            ],
    

    这里是管理员可以访问定义的页面

    对于部分代码使用

    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

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 1970-01-01
      • 2018-09-03
      • 1970-01-01
      • 2015-03-05
      相关资源
      最近更新 更多