Yii3.0认证授权配置详解【Auth】

老雪同学_2114

老雪同学_2114

2026-08-09

829人浏览

原创

必须改用psr-15中间件+显式注入认证服务+独立授权策略,否则报错;需同时安装yiisoft/auth与yiisoft/rbac扩展;配置identityinterface实现类;注册authenticationmiddleware;手动定义并绑定rbac策略;控制器中须构造函数注入identityinterface和policyinterface。

yii3.0认证授权配置详解【auth】

要在 Yii 3.0 中实现用户登录、权限校验和角色控制,必须放弃 Yii::$app->user 和 RBAC 组件的旧式调用,改用 PSR-15 中间件 + 显式注入的认证服务 + 独立授权策略,否则请求会直接抛出 Call to undefined property Yii::$appService not found in container 错误。

安装认证与授权扩展包

Yii 3.0 不内置 Auth 模块,需手动引入官方维护的独立包:

执行 composer require yiisoft/auth yiisoft/rbac。注意:这两个包必须同时安装,yiisoft/rbac 单独安装无法工作,它依赖 yiisoft/auth 提供的 IdentityInterface 和 AuthenticationInterface】

若使用 MySQL 存储权限规则,还需追加 composer require yiisoft/db;若仅用内存策略(如开发调试),可跳过。

配置用户身份提供器(Identity Provider)

这一步定义“谁是用户”以及“如何查用户”:

config/common.php 中注册 yii\auth\IdentityInterface 实现类:

IdentityInterface::class => ['class' => App\Identity\UserIdentity::class],

创建 src/Identity/UserIdentity.php,该类必须实现 IdentityInterface 并提供 findIdentityById()findIdentityByToken()validateCredentials() 方法。不要继承任何 Yii 2.x 的 BaseIdentity——Yii 3.0 没有这个基类。

⚠️ 常见错误:若 validateCredentials() 返回 null 而非 IdentityInterface 实例,登录中间件将静默失败,且无日志提示。

注册认证中间件并挂载到请求栈

Yii 3.0 的认证流程由 PSR-15 中间件驱动,不再靠控制器钩子:

打开 config/web.php,找到 middleware 配置项,在数组开头插入:

new \Yiisoft\Auth\Middleware\AuthenticationMiddleware(),

这行代码必须放在所有路由中间件之前,否则 $request->getAttribute('user') 在后续中间件中始终为 null

该中间件会自动从请求中提取 token(支持 Cookie、Bearer Token、Query 参数三种方式),调用你配置的 IdentityProvider,并将结果存入 Request 属性。

Yii Framework 2.0.51
Yii Framework 2.0.51

Yii Framework 2.0.51 官方 Basic 应用模板,适合旧项目兼容、升级验证和开发测试。

下载

定义并加载 RBAC 权限规则

Yii 3.0 的 RBAC 不再读取 @app/rbac/ 目录下的 PHP 文件,而是通过容器绑定策略实例:

第一步:创建策略类,例如 src/Rbac/PostAuthorPolicy.php,实现 Yiisoft\Rbac\Contract\PolicyInterface,重写 isAllowed() 方法判断当前用户是否有权操作某资源。

第二步:在 config/common.php 中注册策略:

Rbac\Contract\PolicyInterface::class => ['class' => Rbac\PostAuthorPolicy::class],

第三步:在需要鉴权的中间件或控制器中,显式注入 Rbac\Contract\PolicyInterface 实例,调用 $policy->isAllowed($identity, 'update', 'post') 判断。

注意:Yii 3.0 【不提供默认的数据库迁移来建 auth_item 表】,如需持久化角色与权限,必须手写 SQL 或使用 yiisoft/db-migration 扩展创建对应表结构。

在控制器中获取当前用户并做权限判断

控制器不能再用 Yii::$app->user->isGuest,必须通过构造函数注入:

① 在控制器构造函数声明参数:public function __construct(private IdentityInterface $identity)

② 判断是否已认证:if ($this->identity instanceof IdentityInterface) { /* 已登录 */ }

③ 获取用户 ID:$this->identity->getId()

④ 获取原始凭证数据(如邮箱):$this->identity->getCredential()->getEmail()

⑤ 执行权限检查:$this->policy->isAllowed($this->identity, 'delete', 'comment')

这五步缺一不可,跳过第①步会导致容器无法解析依赖,抛出 Entry "App\Controller\SiteController" cannot be resolved

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

2730

22

Aionclaw智能助手介绍
Aionclaw智能助手介绍

本专题汇总了AionClaw(AI龙虾助手)的功能介绍与在线使用入口。AionClaw是杭州趣猿人工智能有限公司推出的桌面级AI智能体,能直接在电脑上读写文件、运行脚本、操作浏览器,自动交付Word、PPT、Excel等成品。

2026.09.20

20

13

AionClaw AI智能体与电脑自动化任务执行功能使用教程
AionClaw AI智能体与电脑自动化任务执行功能使用教程

AionClaw专题整理AI智能体与电脑自动化相关功能使用教程,涵盖安装部署、AI任务执行、Skills技能、文件处理、浏览器控制、电脑操作、持久记忆、聊天工具连接以及办公、编程和内容创作等功能,帮助用户快速掌握AionClaw的实际使用方法。

2026.09.20

0

15

AI视频生成软件推荐
AI视频生成软件推荐

本专题汇总了当前主流的AI视频生成软件推荐与排行榜单,涵盖seko、AniShort、剧云、Lovart、LiblibAI及立刻mv等热门工具。同时整理了各软件在文生视频、图生视频、时长限制、画质表现及免费额度等方面的差异对比,助您快速选对适合创作需求的AI视频生成工具。

2026.09.16

180

9

ai生成视频的工具免费版合集
ai生成视频的工具免费版合集

本专题汇总了当前免费AI生成视频工具的排行榜与推荐清单,涵盖seko、讯飞智作、AniShort及剧云、Lovart等多模型集成平台。同时整理了各工具的免费额度、输出时长、水印政策及适用场景差异,助您快速选择合适工具开启AI视频创作。

2026.09.16

100

10

Pandas时间序列分析与可视化报表
Pandas时间序列分析与可视化报表

本专题整理Pandas日期转换、时间索引、重采样、滚动窗口、时区处理、plot绘图、Styler表格样式和报表输出方法。

2026.09.16

80

23

Pandas数据筛选索引与清洗处理
Pandas数据筛选索引与清洗处理

本专题整理Pandas中的loc、iloc、条件筛选、query查询、缺失值处理、重复值删除、类型转换和字符串列清洗方法。

2026.09.16

60

25

Pandas数据读取导入与文件导出处理
Pandas数据读取导入与文件导出处理

本专题整理Pandas读取CSV、Excel、JSON、SQL、Parquet等文件的方法,以及to_csv、to_excel、to_sql和to_parquet等常用数据导出流程。

2026.09.16

40

27

GDB怎么设置断点
GDB怎么设置断点

本专题介绍GDB按照函数名、源代码行号和文件位置设置断点的方法,详细说明run、continue、next、step等命令的配合使用,帮助定位程序崩溃、逻辑异常及代码未按预期执行的问题。

2026.09.11

380

28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii Framework 2.0 API 官方文档
Yii Framework 2.0 API 官方文档

共0课时 | 0人学习

Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.2万人学习