Skip to main content

tdm_server_rust/utils/
context.rs

1//! 请求上下文 (Request Context)
2//!
3//! 由鉴权中间件注入的当前登录组员信息。
4//! 对齐 Java `ContextUtils`。
5
6use crate::entity::member::Member;
7
8/// 当前请求组员上下文(由中间件注入)
9#[derive(Debug, Clone, Default)]
10pub struct MemberContext {
11    /// 当前登录组员
12    pub member: Option<Member>,
13}
14
15impl MemberContext {
16    /// 是否已登录
17    ///
18    /// # 返回值
19    ///
20    /// 当中间件成功解析 JWT 并加载组员信息时返回 `true`。
21    pub fn is_login(&self) -> bool {
22        self.member.is_some()
23    }
24
25    /// 获取当前登录组员 ID
26    ///
27    /// # 返回值
28    ///
29    /// 已登录时返回组员 ID,未登录返回 `None`。
30    pub fn member_id(&self) -> Option<i32> {
31        self.member.as_ref().map(|m| m.id)
32    }
33
34    /// 是否为管理员
35    ///
36    /// 判断当前组员是否具有审稿权限(`post_ids` 包含 4)。
37    /// 审稿岗位 (post=4) 即为管理员。
38    ///
39    /// # 返回值
40    ///
41    /// 已登录且包含审稿岗位时返回 `true`。
42    pub fn is_admin(&self) -> bool {
43        self.member
44            .as_ref()
45            .map(|m| m.post_ids.contains(&4))
46            .unwrap_or(false)
47    }
48
49    /// 获取当前组员的引用
50    ///
51    /// # 返回值
52    ///
53    /// 已登录时返回组员引用,未登录返回 `None`。
54    pub fn current(&self) -> Option<&Member> {
55        self.member.as_ref()
56    }
57}