Skip to main content

rs_tenant/
request.rs

1use crate::ids::{PrincipalId, TenantId};
2use crate::permission::Permission;
3use crate::scope::ScopePath;
4
5/// 用于授权的租户级主体。
6#[derive(Clone, Debug, Eq, PartialEq, Hash)]
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8pub struct AuthSubject {
9    /// 租户标识符。
10    pub tenant: TenantId,
11    /// 主体标识符。
12    pub principal: PrincipalId,
13}
14
15impl AuthSubject {
16    /// 创建授权主体。
17    pub fn new(tenant: TenantId, principal: PrincipalId) -> Self {
18        Self { tenant, principal }
19    }
20}
21
22/// 查询某个权限可访问的数据范围。
23#[derive(Clone, Debug, Eq, PartialEq)]
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25pub struct ScopeQuery {
26    /// 租户级主体。
27    pub subject: AuthSubject,
28    /// 包含动作的完整权限。
29    pub permission: Permission,
30}
31
32/// 租户级访问请求。
33#[derive(Clone, Debug, Eq, PartialEq)]
34#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
35pub struct TenantAccessRequest {
36    /// 租户级主体。
37    pub subject: AuthSubject,
38    /// 包含动作的完整权限。
39    pub permission: Permission,
40}
41
42/// 路径级访问请求。
43#[derive(Clone, Debug, Eq, PartialEq)]
44#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
45pub struct ScopedAccessRequest {
46    /// 租户级主体。
47    pub subject: AuthSubject,
48    /// 包含动作的完整权限。
49    pub permission: Permission,
50    /// 正在访问的目标路径。
51    pub target: ScopePath,
52}