author/
lib.rs

1use std::hash::Hash;
2use thiserror::Error;
3
4pub mod rbac;
5
6#[derive(Error, Debug)]
7pub enum Error {
8    #[error("Forbidden")]
9    Forbidden,
10}
11
12pub struct ProtectedResource<R> {
13    resource: R,
14}
15
16// pub trait Object {
17//     type Identifier: Hash + Eq;
18//
19//     fn identifier(&self) -> Self::Identifier;
20// }
21
22pub trait Resource {
23    type Action: Hash + Eq;
24
25    //fn authorise<Subj>(&self, subject: &Subj, action: &Self::Action) -> Result<(), Error>;
26}
27
28pub trait Subject {}
29
30pub trait Policy<Res, Subj>
31where
32    Res: Resource,
33    Subj: Subject,
34{
35    fn authorise(&self, resource: &Res, subject: &Subj, action: &Res::Action) -> Result<(), Error> {
36        Err(Error::Forbidden)
37    }
38}