sinevia / php-library-authentication
PHP 库认证
v1.1.0
2023-10-28 11:56 UTC
README
认证类
安装
使用 Composer 安装
composer require sinevia/php-library-authentication
用法
1. 身份管理
认证类帮助您在当前会话中可靠地保持已认证的用户。
\Sinevia\Authentication::getInstance()->setIdentity('user', $loggedinUser->Id); // After successful login
$userId = \Sinevia\Authentication::getInstance()->getIdentity('user'); // During session
\Sinevia\Authentication::getInstance()->reoveIdentity('user'); // On logout
2. 命名空间身份
可能最大的特性是支持命名空间。命名空间允许在不同的责任区域之间保持分离。以下示例将有助于更好地说明命名空间。一个网站可以划分为管理区域、客户区域、员工区域,每个区域都有不同的功能。在登录时,管理员可以同时以管理员和员工身份进行认证(示例 1)。在尝试访问区域时,可以在允许或拒绝访问之前检查其访问权限(示例 2)。
示例 1. 将当前用户添加到管理员和员工命名空间
if ($isManager) {
\Sinevia\Authentication::getInstance()->setIdentity('manager', $loggedinUser->Id);
}
if ($isEmployee) {
\Sinevia\Authentication::getInstance()->setIdentity('employee', $loggedinUser->Id);
}
示例 2. 检查用户是否有权访问管理员区域,并允许/拒绝访问
// Check if the user is part of the manager namespace
$managerId = \Sinevia\Authentication::getInstance()->getIdentity('manager');
// Check if user cannot access the manager access
$cannotAccessManagerArea = is_null($managerId);
// Deny access to manager area
if (cannotAccessManagerArea) {
die('Only managers are allowed access to the manager area');
}
在实际应用中,您可能希望创建一个辅助类,以帮助保持认证过程更易读。
class Auth {
/**
* Returns the user authenticated to a namespace
* @param string $namespace
* @return \App\Models\Users\User
*/
public static function getUser($namespace) {
return \Sinevia\Authentication::getInstance()->getIdentity($namespace);
}
/**
* Sets the authenticated user to a namespace
* @param string $namespace
* @param \App\Models\Users\User $user
* @return void
*/
public static function setUser($namespace, $user) {
return \Sinevia\Authentication::getInstance()->setIdentity($namespace, $user);
}
/**
* Removes the user from a namespace
* @param string $namespace
* @return void
*/
public static function removeUser($namespace) {
return \Sinevia\Authentication::getInstance()->emptyIdentity($namespace);
}
}
然后可以像这样使用它
$managerId = Auth::getUser('manager');