我搜索过网络,我得到的唯一结果就是大量的理论。 我厌倦了理解Yii2 Framework中的身份验证和授权的概念, 我已经在yii2中学习了认证的概念,并且已经完成了yii2框架的整个文档。我需要了解yii2中auth的实现,我是新手,有人可以在Yii2中给我一步一步的认证和授权过程框架。 这样我的应用程序就可以识别登录用户并将其定向到特定页面。 我的应用程序有四种用户: 管理员,审批人,金融家和简单用户 我希望他们在成功登录后转到各自的页面。
答案 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的注释部分,我用它来创建角色。
要拒绝访问页面,请使用行为
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
希望这会有所帮助:)