#权限 #授权 #策略 #解耦 #认证

permeable

一个权限需求特质。解耦了权限请求者与权限/认证提供者。

4 个版本

0.3.2 2023 年 12 月 7 日
0.3.1 2023 年 4 月 6 日
0.3.0 2023 年 4 月 6 日
0.2.0 2023 年 4 月 4 日

#678 in Rust 模式


suchbar 中使用

MIT/Apache

8KB
51

Permeable

Permeable 是一个权限需求特质。它帮助解耦权限请求者与权限/认证提供者。

我们的目标是创建一个最简单的权限请求特质。可以被权限提供者实现以区分用户。

示例

use permeable::{Permeable, PermissionError};

const RO_THIS: &str = "RoThis";
const RW_THIS: &str = "RwThis";
const ACCESS_THAT: &str = "AccessThat";

struct User {
    name: String,
};

// A naive implementation of a the Permeable-Trait.
impl Permeable for User {
    fn has_perm(&self, permission: &str) -> Result<(), PermissionError> {
        match (self.name.as_str(), permission) {
            ("admin", _) => Ok(()),
            ("peter", ACCESS_THAT) => Ok(()),
            ("peter", RO_THIS) => Ok(()),
            ("paul", RO_THIS) => Ok(()),
            ("paul", RW_THIS) => Ok(()),
            // catch all
            (_, perm) => Err(PermissionError::denied(permission, &self.name)),
        }
    }
}

fn main() {
    let admin = User { name: String::from("admin") };
    assert_eq!(admin.has_perm(RW_THIS), Ok(()));
    let peter = User { name: String::from("peter") };
    assert_eq!(peter.has_perm(ACCESS_THAT), Ok(()));
    assert_eq!(peter.has_perm(RW_THIS).is_err(), true);
}

无运行时依赖