kustos_shared/internal/
impls.rs

1// SPDX-FileCopyrightText: OpenTalk GmbH <mail@opentalk.eu>
2//
3// SPDX-License-Identifier: EUPL-1.2
4
5//! Provides various internal implementations
6
7use itertools::Itertools;
8
9use super::{ToCasbin, ToCasbinString};
10use crate::{
11    access::AccessMethod,
12    subject::{
13        GroupToRole, PolicyGroup, PolicyInvite, PolicyRole, PolicyUser, UserToGroup, UserToRole,
14    },
15};
16
17impl ToCasbinString for AccessMethod {
18    fn to_casbin_string(self) -> String {
19        self.to_string()
20    }
21}
22
23impl ToCasbinString for &[AccessMethod] {
24    /// Converts multiple AccessMethods to a Regex that matches any one of them
25    fn to_casbin_string(self) -> String {
26        self.iter()
27            .map(|&access_method| ToCasbinString::to_casbin_string(access_method))
28            .join("|")
29    }
30}
31
32impl ToCasbinString for PolicyUser {
33    fn to_casbin_string(self) -> String {
34        format!("user::{}", self.0)
35    }
36}
37
38impl ToCasbinString for PolicyInvite {
39    fn to_casbin_string(self) -> String {
40        format!("invite::{}", self.0)
41    }
42}
43
44impl ToCasbinString for PolicyRole {
45    fn to_casbin_string(self) -> String {
46        format!("role::{}", self.0)
47    }
48}
49
50impl ToCasbinString for PolicyGroup {
51    fn to_casbin_string(self) -> String {
52        format!("group::{}", self.0)
53    }
54}
55
56impl ToCasbin for GroupToRole {
57    fn to_casbin_policy(self) -> Vec<String> {
58        vec![self.0.to_casbin_string(), self.1.to_casbin_string()]
59    }
60}
61
62impl ToCasbin for UserToGroup {
63    fn to_casbin_policy(self) -> Vec<String> {
64        vec![self.0.to_casbin_string(), self.1.to_casbin_string()]
65    }
66}
67
68impl ToCasbin for UserToRole {
69    fn to_casbin_policy(self) -> Vec<String> {
70        vec![self.0.to_casbin_string(), self.1.to_casbin_string()]
71    }
72}