1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
use bonsaidb::core::{
    admin::PermissionGroup,
    connection::AsyncStorageConnection,
    permissions::{Action, ResourceName, Statement},
    schema::NamedCollection,
};

pub async fn initialize<Storage: AsyncStorageConnection>(
    connection: &Storage,
) -> anyhow::Result<()> {
    let admin = connection.admin().await;

    PermissionGroup::entry_async("administrators", &admin)
        .or_insert_with(|| PermissionGroup {
            name: String::from("administrators"),
            statements: vec![Statement::allow_all_for_any_resource()],
        })
        .await?;

    Ok(())
}

pub fn project_resource_name(project_id: u32) -> ResourceName<'static> {
    ResourceName::named("dossier")
        .and("project")
        .and(u64::from(project_id))
}

#[derive(Action, Debug)]
#[action(actionable = bonsaidb::core::actionable)]
pub enum DossierAction {
    SyncFiles,
}