权限 (Permission) 与资源管理
将组织 (Organization) 作为资源,并应用组织模板来保护它。例如,每个组织 (Organization) 在租户内都有自己的文档。只有拥有正确角色 (Role) 的用户才能编辑或删除这些文档。
详见 组织权限 (Organization permissions)。
使用组织基于角色的访问控制 (RBAC) 管理用户权限 (Permissions)
通过上述设置,你可以通过电子邮件发送邀请,受邀者可以以分配的角色 (Role) 加入组织 (Organization)。
拥有不同组织角色 (Role) 的用户将在其组织令牌 (Organization token) 中拥有不同的权限 (Scopes)。你的客户端应用和后端服务都应检查这些权限 (Scopes) 以确定可见功能和允许的操作。
处理组织令牌 (Organization token) 中权限 (Scopes) 的更新
本节涵盖关于管理组织模板和授权 (Authorization) 场景的高级主题。如果你不熟悉这些概念,请先阅读 授权 (Authorization) 和 组织模板 (Organization template)。
管理组织令牌 (Organization token) 中权限 (Scopes) 的更新包括:
撤销现有权限 (Scopes)
例如,将管理员降级为非管理员成员时,应从该用户移除权限 (Scopes)。在这种情况下,清除缓存的组织令牌 (Organization token),并使用刷新令牌 (Refresh token) 获取新的组织令牌 (Organization token)。减少后的权限 (Scopes) 会立即反映在新签发的组织令牌 (Organization token) 中。
授予新权限 (Scopes)
这可以分为两种情况:
授予已在认证 (Authentication) 系统中定义的新权限 (Scopes)
与撤销权限 (Scopes) 类似,如果新授予的权限 (Scope) 已在认证 (Authentication) 服务器注册,签发新的组织令牌 (Organization token),新权限 (Scopes) 会立即生效。
授予认证 (Authentication) 系统中新引入的权限 (Scopes)
在这种情况下,触发重新登录或重新授权流程以更新用户的组织令牌 (Organization token)。例如,调用 Logto SDK 中的 signIn 方法。
实时检查权限 (Permissions) 并更新组织令牌 (Organization token)
Logto 提供了 Management API 用于获取组织 (Organization) 内用户的实时权限 (Permissions)。
GET /api/organizations/{id}/users/{userId}/scopes(API 参考)
将用户组织令牌 (Organization token) 中的权限 (Scopes) 与实时权限 (Permissions) 进行比较,以判断用户是否被提升或降级。
-
如果被降级,清除缓存的组织令牌 (Organization token),SDK 会自动签发带有更新权限 (Scopes) 的新令牌 (Token)。
const { clearAccessToken } = useLogto();
...
// 如果获取到的实时权限 (Scopes) 少于组织令牌 (Organization token) 中的权限 (Scopes)
await clearAccessToken();这不需要重新登录或重新授权流程。Logto SDK 会自动签发新的组织令牌 (Organization token)。
-
如果在认证 (Authentication) 系统中引入了新的权限 (Scope),则需触发重新登录或重新授权流程以更新用户的组织令牌 (Organization token)。例如,使用 React SDK:
const { clearAllTokens, signIn } = useLogto();
...
// 如果获取到的实时权限 (Scopes) 比组织令牌 (Organization token) 中的权限 (Scopes) 多了新分配的权限 (Scopes)
await clearAllTokens();
signIn({
redirectUri: '<your-sign-in-redirect-uri>',
prompt: 'consent',
});上述代码会触发跳转到用户授权页面 (Consent screen),并在用户组织令牌 (Organization token) 中带有更新后的权限 (Scopes) 自动重定向回你的应用。