Mountain/IPC/Security/
Role.rs1use serde::{Deserialize, Serialize};
32
33#[derive(Debug, Clone, Serialize, Deserialize)]
62pub struct Role {
63 pub name:String,
65
66 pub permissions:Vec<String>,
68
69 pub description:String,
71}
72
73impl Role {
74 pub fn new(name:String, permissions:Vec<String>, description:String) -> Self {
76 Self { name, permissions, description }
77 }
78
79 pub fn has_permission(&self, permission:&str) -> bool { self.permissions.iter().any(|p| p == permission) }
81
82 pub fn add_permission(&mut self, permission:String) {
84 if !self.has_permission(&permission) {
85 self.permissions.push(permission);
86 }
87 }
88
89 pub fn remove_permission(&mut self, permission:&str) { self.permissions.retain(|p| p != permission); }
91
92 pub fn permission_count(&self) -> usize { self.permissions.len() }
94}
95
96#[cfg(test)]
97mod tests {
98
99 use super::*;
100
101 #[test]
102 fn test_role_creation() {
103 let role = Role::new(
104 "test".to_string(),
105 vec!["permission1".to_string(), "permission2".to_string()],
106 "Test role".to_string(),
107 );
108
109 assert_eq!(role.name, "test");
110
111 assert_eq!(role.permission_count(), 2);
112 }
113
114 #[test]
115 fn test_has_permission() {
116 let role = Role::new(
117 "test".to_string(),
118 vec!["permission1".to_string(), "permission2".to_string()],
119 "Test role".to_string(),
120 );
121
122 assert!(role.has_permission("permission1"));
123
124 assert!(!role.has_permission("permission3"));
125 }
126
127 #[test]
128 fn test_add_permission() {
129 let mut role = Role::new("test".to_string(), vec!["permission1".to_string()], "Test role".to_string());
130
131 role.add_permission("permission2".to_string());
132
133 assert_eq!(role.permission_count(), 2);
134
135 role.add_permission("permission1".to_string());
137
138 assert_eq!(role.permission_count(), 2);
139 }
140
141 #[test]
142 fn test_remove_permission() {
143 let mut role = Role::new(
144 "test".to_string(),
145 vec!["permission1".to_string(), "permission2".to_string()],
146 "Test role".to_string(),
147 );
148
149 role.remove_permission("permission1");
150
151 assert_eq!(role.permission_count(), 1);
152
153 assert!(!role.has_permission("permission1"));
154
155 role.remove_permission("permission3");
157
158 assert_eq!(role.permission_count(), 1);
159 }
160}