Skip to main content

DevelopmentNodeEnvironment_MicrosoftVSCodeDependency_22NodeVersion_Bundle_Clean_Debug_ElectronProfile_EsbuildCompiler_Mountain/IPC/Security/PermissionManager/
SecurityContext.rs

1//! Security envelope used by `Manager::Struct::validate_permission`.
2//! Carries the user id, roles, direct permissions, origin IP,
3//! and request timestamp. `ipc_default` produces the loopback
4//! "ipc-connection" context used for local IPC.
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct Struct {
10	pub user_id:String,
11
12	pub roles:Vec<String>,
13
14	pub permissions:Vec<String>,
15
16	pub ip_address:String,
17
18	pub timestamp:std::time::SystemTime,
19}
20
21impl Struct {
22	pub fn new(user_id:String, roles:Vec<String>, permissions:Vec<String>, ip_address:String) -> Self {
23		Self { user_id, roles, permissions, ip_address, timestamp:std::time::SystemTime::now() }
24	}
25
26	pub fn has_role(&self, role:&str) -> bool { self.roles.iter().any(|r| r == role) }
27
28	pub fn has_permission(&self, permission:&str) -> bool { self.permissions.iter().any(|p| p == permission) }
29
30	pub fn ipc_default() -> Self {
31		Self {
32			user_id:"ipc-connection".to_string(),
33
34			roles:vec!["user".to_string()],
35
36			permissions:vec![],
37
38			ip_address:"127.0.0.1".to_string(),
39
40			timestamp:std::time::SystemTime::now(),
41		}
42	}
43}