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 use super::*;
99
100 #[test]
101 fn test_role_creation() {
102 let role = Role::new(
103 "test".to_string(),
104 vec!["permission1".to_string(), "permission2".to_string()],
105 "Test role".to_string(),
106 );
107
108 assert_eq!(role.name, "test");
109 assert_eq!(role.permission_count(), 2);
110 }
111
112 #[test]
113 fn test_has_permission() {
114 let role = Role::new(
115 "test".to_string(),
116 vec!["permission1".to_string(), "permission2".to_string()],
117 "Test role".to_string(),
118 );
119
120 assert!(role.has_permission("permission1"));
121 assert!(!role.has_permission("permission3"));
122 }
123
124 #[test]
125 fn test_add_permission() {
126 let mut role = Role::new("test".to_string(), vec!["permission1".to_string()], "Test role".to_string());
127
128 role.add_permission("permission2".to_string());
129 assert_eq!(role.permission_count(), 2);
130
131 role.add_permission("permission1".to_string());
133 assert_eq!(role.permission_count(), 2);
134 }
135
136 #[test]
137 fn test_remove_permission() {
138 let mut role = Role::new(
139 "test".to_string(),
140 vec!["permission1".to_string(), "permission2".to_string()],
141 "Test role".to_string(),
142 );
143
144 role.remove_permission("permission1");
145 assert_eq!(role.permission_count(), 1);
146 assert!(!role.has_permission("permission1"));
147
148 role.remove_permission("permission3");
150 assert_eq!(role.permission_count(), 1);
151 }
152}