Mountain/IPC/Permission/Role/ManageRole/
Permission.rs1#![allow(non_snake_case)]
2
3use serde::{Deserialize, Serialize};
10
11#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct Struct {
13 pub Name:String,
14
15 pub Description:String,
16
17 pub Category:String,
18
19 pub IsSensitive:bool,
20}
21
22impl Struct {
23 pub fn New(Name:String, Description:String, Category:String) -> Self {
24 Self { Name, Description, Category, IsSensitive:false }
25 }
26
27 pub fn NewSensitive(Name:String, Description:String, Category:String) -> Self {
28 Self { Name, Description, Category, IsSensitive:true }
29 }
30
31 pub fn SetSensitive(mut self) -> Self {
32 self.IsSensitive = true;
33
34 self
35 }
36
37 pub fn GetAction(&self) -> String { self.Name.rsplit('.').next().unwrap_or("unknown").to_string() }
38
39 pub fn GetCategory(&self) -> String {
40 if let Some(pos) = self.Name.rfind('.') {
41 self.Name[..pos].to_string()
42 } else {
43 "unknown".to_string()
44 }
45 }
46
47 pub fn Validate(&self) -> Result<(), String> {
48 if self.Name.is_empty() {
49 return Err("Permission name cannot be empty".to_string());
50 }
51
52 if self.Name.contains(|c:char| c.is_whitespace()) {
53 return Err("Permission name cannot contain whitespace".to_string());
54 }
55
56 if !self.Name.contains('.') {
57 return Err("Permission name must contain a dot separating category and action".to_string());
58 }
59
60 if self.Description.is_empty() {
61 return Err("Permission description cannot be empty".to_string());
62 }
63
64 if self.Category.is_empty() {
65 return Err("Permission category cannot be empty".to_string());
66 }
67
68 Ok(())
69 }
70}