glance-project/authorization-service

CERN 授权服务 API 的抽象层

v1.0.0 2024-05-15 06:25 UTC

README

这是一个用于使用 CERN 授权服务 API 的 SDK。

安装

使用 Composer 安装

composer require glance-project/authorization-service

入门

要使用此库,您可能需要在 应用程序门户 上注册应用程序。如果您不知道这意味着什么,请参阅 CERN 授权服务文档

在您的应用程序注册后,您将使用 客户端 ID客户端密钥

用法

此库旨在通过多个提供者使用。

所有提供者都可以使用应用程序凭据或访问令牌创建。

// Example of $inProduction. Adapt for your needs!
$inProduction = getenv("ENVIRONMENT") === "PRODUCTION";

$groupProvider = GroupProvider::createWithAppCredentials($clientId, $clientSecret, $inProduction);

$identityProvider = IdentityProvider::createWithAccessToken("eyJ0eXAiOiJKV1QiLCJhbGciOiJIUziJ9...", $inProduction);

GroupProvider

GroupProvider::findGroupByIdentifier()

通过标识符查找组。

如果组不存在,将抛出 GroupNotFoundException

$group = $groupProvider->findGroupByIdentifier("fence-developers");

$group->identifier();     // "fence-developers"
$group->id()->toString(); // "08d771b2-78da-2fc0-fbd3-3816f92282c8"

GroupProvider::createStaticGroup()

创建静态组。只需标识符、显示名称和描述即可。

$group = $groupProvider->createStaticGroup(
    "test-group",                                                // Identifier           (required)
    "A test group",                                              // Display name         (required)
    "This is a test group description",                          // Description          (required)
    GroupId::fromString("08d779a9-1e2c-72ad-52ff-45ff27e620c1"), // Administrators group (optional)
    Category::test(),                                            // Category             (optional)
    new DateTimeImmutable("2021-12-31"),                         // Expiration date      (optional)
    SelfSubscriptionPolicy::closed(),                            // Self subscription    (optional)
    PrivacyPolicy::groupAdministrators(),                        // Privacy policy       (optional)
    true                                                         // Approval required    (optional)
);

GroupProvider::deleteGroup()

通过标识符删除组。

$groupProvider->deleteGroup("fence-developers");

GroupProvider::synchronizeMembers()

使用 身份 ID 定义组的组成。

不在给定 身份 ID 数组中的成员将被删除。

最后,只有通知的成员将是组的一部分。

$identityIds = $identityProvider->getIdsFromPersonIds([837034, 123456]);

$groupProvider->synchronizeMembers("fence-developers", $identityIds);

$members = $groupProvider->findMemberIdentities("fence-developers");

foreach ($members as $member) {
    echo $member->personId(); . "\n"
}

// Output:
// 837034
// 123456

GroupProvider::addMembersToGroup()

在不改变整个组组成的情况下添加成员到组。

$identityIds = $identityProvider->getIdsFromPersonIds([837034, 123456]);

$groupProvider->addMembersToGroup("fence-developers", $identityIds);

GroupProvider::removeMembersFromGroup()

在不改变整个组组成的情况下从组中删除成员。

$identityIds = $identityProvider->getIdsFromPersonIds([ 837034 ]);

$groupProvider->removeMembersFromGroup("fence-developers", $identityIds);

GroupProvider::findMemberIdentities()

查找组内的成员。返回 Identity 对象的数组。

$members = $groupProvider->findMemberIdentities("fence-developers");

foreach ($members as $member) {
    $member->personId();
    $member->displayName();
}

GroupProvider::findMemberGroupsFromGroup()

如果没有匹配的 groupId 或方法失败,将抛出异常。

$groups = $groupProvider->findMemberGroupsFromGroup("59edf297-bd07-4000-904d-80cc6288004a");

foreach ($groups as $group) {
    echo $group->toString() . "\n";
}

// Output:
// 59edf297-bd07-4000-904d-80cc6288004a
// dbcd6647-fd50-493e-9162-635f355794d4

GroupProvider::removeMemberGroupsFromGroup()

如果没有匹配的 groupId 或方法失败,将抛出异常。

$groupProvider->removeMemberGroupsFromGroup("59edf297-bd07-4000-904d-80cc6288004a");

GroupProvider::removeAllMembersFromGroup()

如果没有匹配的 groupId 或方法失败,将抛出异常。

$groupProvider->removeAllMembersFromGroup("59edf297-bd07-4000-904d-80cc6288004a");

GroupProvider::removeAllMemberGroupsFromGroup()

如果没有匹配的 groupId 或方法失败,将抛出异常。

$groupProvider->removeAllMemberGroupsFromGroup("59edf297-bd07-4000-904d-80cc6288004a");

GroupProvider::removeAllMembersAndAllGroupMembersFromGroup()

如果没有匹配的 groupId 或方法失败,将抛出异常。

$groupProvider->removeAllMembersAndAllGroupMembersFromGroup("59edf297-bd07-4000-904d-80cc6288004a");

IdentityProvider

IdentityProvider::getIdsFromPersonIds()

从给定的 人员 ID 获取 身份 ID

如果无法获取身份 ID,则抛出 FailedToFindIdentityIdException

如果您想获得只包含找到的 ID 的结果,请参阅 IdentityProvider::findIdsFromPersonIds()

$ids = $identityProvider->getIdsFromPersonIds([837034, 823204]);

foreach ($ids as $id) {
    echo $id->toString() . "\n";
}

// Output:
// 59edf297-bd07-4000-904d-80cc6288004a
// dbcd6647-fd50-493e-9162-635f355794d4

IdentityProvider::findIdsFromPersonIds()

从给定的 人员 ID 查找 身份 ID

如果无法获取身份 ID,则跳过并只返回找到的 ID。

如果您想获得抛出异常的方法,请参阅 IdentityProvider::getIdsFromPersonIds()

$ids = $identityProvider->findIdsFromPersonIds([837034, 123456]); // 123456 does not exist

foreach ($ids as $id) {
    echo $id->toString() . "\n";
}

// Output:
// 59edf297-bd07-4000-904d-80cc6288004a

IdentityProvider::searchByName()

$identities = $identityProvider->searchByName("Mar");

foreach ($identities as $identity) {
    echo $identity->displayName() . "\n";
}

// Output:
// Mario Gunter Simao
// Marcelo Teixeira dos Santos

IdentityProvider::findByPersonId()

如果没有匹配的 personId 或方法失败,则抛出异常。

$identity = $identityProvider->findByPersonId(837034);

echo $identity->displayName();

// Output:
// Mario Gunter Simao

IdentityProvider::findByIdentityId()

如果没有匹配的 identityId 或方法失败,则抛出异常。

$identity = $identityProvider->findByIdentityId(" 59edf297-bd07-4000-904d-80cc6288004a");

echo $identity->displayName();

// Output:
// Mario Gunter Simao