ddruganov / yii2-api-auth
该软件包最新版本(1.4.0)没有可用的许可证信息。
yii2 的身份验证工具
1.4.0
2022-04-26 07:21 UTC
Requires
- ddruganov/yii2-api-essentials: ^1
- firebase/php-jwt: ^6.0
- yiisoft/yii2: ^2.0
Requires (Dev)
- codeception/codeception: ^4.1
- codeception/module-asserts: ^1.0.0
- codeception/module-phpbrowser: ^1.0.0
- fakerphp/faker: ^1.19
README
带有 rbac 的 JWT 身份验证服务器
安装
composer require ddruganov/yii2-api-auth
如何使用
- 将此添加到您的应用程序主配置中
... 'components' => [ AuthComponentInterface::class => AuthComponent::class, RbacComponentInterface::class => RbacComponent::class, AccessTokenProviderInterface::class => HeaderAccessTokenProvider::class ], 'controllerMap' => [ 'auth' => AuthController::class, 'app' => AppController::class, 'permission' => PermissionController::class, 'role' => PermissionController::class, 'user' => PermissionController::class ], ...
- 将此添加到您的应用程序参数中
... 'authentication' => [ 'masterPassword' => [ 'enabled' => false, 'value' => '' ], 'tokens' => [ 'secret' => '', 'access' => [ 'ttl' => 0, // seconds 'issuer' => '' ], 'refresh' => [ 'ttl' => 0 // seconds ] ], 'maxActiveSessions' => 3 ] ...
- 在您的控制台配置中添加迁移以启用 rbac 功能
... 'controllerMap' => [ 'migrate' => [ 'class' => MigrateController::class, 'migrationPath' => null, 'migrationNamespaces' => [ 'console\migrations', 'ddruganov\Yii2ApiAuth\migrations', ], ], ], ...
身份验证
所有方法都需要 authenticate
权限;
POST auth/login
使用电子邮件和密码登录到默认应用程序并获取一对令牌POST auth/login-into
使用应用程序 ID 当已认证时在其他应用程序中进行认证POST auth/refresh
使用您的刷新令牌以获取新鲜的一对令牌POST auth/logout
登出GET auth/current-user
获取当前用户信息GET auth/verify
保留;由ddruganov\yii2-api-auth-proxy
使用POST auth/check-permission
保留;由ddruganov\yii2-api-auth-proxy
使用- 使用
Yii::$app->get(AuthComponentInterface::class)->getCurrentUser()
获取当前登录的ddruganov\Yii2ApiEssentials\auth\models\User
- 将
AuthFilter
作为行为附加到您的ApiController
以仅允许已认证用户访问端点 - 将
RbacFilter
作为行为附加到您的ApiController
以仅允许具有特定权限的用户访问端点
显然,您的 User
类将不仅仅有简单的字段如 email
和 name
,因此您必须从 AuthComponent
返回不同的用户类型。最简单的方法是
final class YourAuthComponent extends Yii2ApiAuthComponent { public function getCurrentUser(): ?YourUser { return YourUser::findOne($this->getPayloadValue('uid')); } }
YourUser
必须扩展 ddruganov\Yii2ApiEssentials\auth\models\User
应用程序
GET app/all
获取所有可用应用程序的列表GET app/one
使用应用程序 UUID 获取单个应用程序的信息POST app/create
创建应用程序;需要app.create
权限POST app/update
更新应用程序;需要app.update
权限POST app/delete
删除应用程序;需要app.delete
权限- 使用
Yii::$app->get(AuthComponentInterface::class)->login($user, $app)
获取指定应用程序的一对令牌 - 别忘了为新创建的应用程序创建权限
请注意,您不能创建默认应用程序,只能更改现有应用程序以适应您的数据
权限
GET permission/all
获取所有可用权限的列表;需要permission.view
权限GET permission/one
使用权限 ID 获取关于权限的完整信息;需要permission.view
权限POST permission/create
创建权限;需要permission.create
权限POST permission/update
更新权限;需要permission.update
权限POST permission/delete
删除权限(同时删除角色绑定);需要permission.delete
权限
角色
GET role/all
获取所有可用角色的列表;需要role.view
权限GET role/one
使用角色 ID 获取关于角色的完整信息;需要role.view
权限POST role/create
创建角色;需要role.create
权限POST role/update
更新角色;需要role.update
权限POST role/delete
删除角色(同时删除权限和用户绑定);需要role.delete
权限
用户
GET user/all
获取所有可用用户列表;需要user.view
权限GET user/one
带用户 ID 获取用户完整信息;需要user.view
权限POST user/create
创建用户;需要user.create
权限POST user/update
更新用户;需要user.update
权限POST user/delete
删除用户(同时删除角色绑定);需要user.delete
权限
扩展用户控制器、表单和收集器的示例
final class YourUpdateForm extends UpdateForm { public ?bool $isBanned = false; public function rules() { return ArrayHelper::merge(parent::rules(), [ [['isBanned'], 'required'] ]); } protected function setCustomAttributes(Model $model) { parent::setCustomAttributes($model); $model->setAttributes([ 'is_banned' => $this->isBanned ]); } }
final class YourUserAllCollector extends UserAllCollector { protected function _run(): ExecutionResult { $query = YourUser::find() ->newestFirst() ->limit($this->limit) ->page($this->page); return ExecutionResult::success([ 'totalPageCount' => (clone $query)->getPageCount(), 'users' => array_map( fn (User $user) => [ 'id' => $user->getId(), 'email' => $user->getEmail(), 'name' => $user->getName(), 'isBanned' => $user->isBanned(), 'createdAt' => $user->getCreatedAt(), ], (clone $query)->all() ) ]); } }
final class YourUserController extends UserController { public function actions() { return ArrayHelper::merge(parent::actions(),[ 'all' => YourAllUserCollector::class, 'update' => YourUpdateForm::class ]); } }
YourUser
必须扩展 ddruganov\Yii2ApiEssentials\auth\models\User