sinevia/php-library-authentication

v1.1.0 2023-10-28 11:56 UTC

This package is auto-updated.

Last update: 2024-08-28 13:50:16 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');