| 51 | } |
| 52 | |
| 53 | pub fn from_config(permission: &ConfigPermission) -> PermissionRuleset { |
| 54 | let mut ruleset: PermissionRuleset = Vec::new(); |
| 55 | |
| 56 | for (key, value) in permission.iter() { |
| 57 | match value { |
| 58 | ConfigValue::Action(action) => { |
| 59 | ruleset.push(PermissionRule { |
| 60 | permission: key.clone(), |
| 61 | action: *action, |
| 62 | pattern: "*".to_string(), |
| 63 | }); |
| 64 | } |
| 65 | ConfigValue::Patterns(patterns) => { |
| 66 | for (pattern, action) in patterns.iter() { |
| 67 | ruleset.push(PermissionRule { |
| 68 | permission: key.clone(), |
| 69 | pattern: expand(pattern), |
| 70 | action: *action, |
| 71 | }); |
| 72 | } |
| 73 | } |
| 74 | } |
| 75 | } |
| 76 | |
| 77 | ruleset |
| 78 | } |
| 79 | |
| 80 | pub fn merge(rulesets: &[PermissionRuleset]) -> PermissionRuleset { |
| 81 | rulesets.iter().flat_map(|r| r.clone()).collect() |