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}