Skip to content
Extraits de code Groupes Projets
Vérifiée Valider 767c285e rédigé par Kubat's avatar Kubat
Parcourir les fichiers

First simple acl implementation

parent cc286d60
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
use crate::bool_to_result;
use matrix_sdk::{room::Room, ruma::UserId};
use std::result::Result;
#[allow(dead_code)]
pub enum CmdAcl {
RoomOnly(String),
AdminOnly,
List(Vec<CmdAcl>),
}
#[allow(dead_code)]
pub struct CmdAdminRegister {
admins: Vec<UserId>,
}
impl CmdAdminRegister {
fn is_admin(&self, user_id: UserId) -> bool {
return self.admins.iter().position(|x| *x == user_id).is_some();
}
#[allow(dead_code)]
pub fn add_admin(&mut self, user_id: UserId) {
if !self.is_admin(user_id.clone()) {
self.admins.push(user_id);
}
}
#[allow(dead_code)]
pub fn revoke_admin(&mut self, user_id: UserId) -> Result<(), String> {
match self.admins.iter().position(|x| *x == user_id) {
Some(index) => {
self.admins.remove(index);
return Ok(());
}
None => return Err("Is not an admin".to_string()),
}
}
}
#[allow(dead_code)]
pub fn action_permited(
cmd_admin_register: &CmdAdminRegister,
acls: &CmdAcl,
room: &Room,
user_id: &UserId,
) -> Result<(), String> {
return match acls {
CmdAcl::AdminOnly => bool_to_result!(
cmd_admin_register.is_admin(user_id.clone()),
(),
"Is not an admin".to_string()
),
CmdAcl::RoomOnly(room_id) => bool_to_result!(
room.room_id() == room_id,
(),
"Not permited in this room".to_string()
),
CmdAcl::List(acl_list) => match acl_list
.iter()
.map(|acl| action_permited(cmd_admin_register, acl, room, user_id))
.filter(|acl_res| acl_res.is_err())
.map(|acl_res| acl_res.clone().unwrap_err())
.reduce(|err1, err2| err1 + ", " + &err2)
{
Some(err) => Err(err),
None => Ok(()),
},
};
}
#![allow(dead_code)]
#[macro_export]
macro_rules! return_if {
($var:expr, $ret:expr) => {{
if ($var) {
return $ret;
}
}};
}
#[macro_export]
macro_rules! return_unless {
($var:expr, $ret:expr) => {{
if (!($var)) {
return $ret;
}
}};
}
#[macro_export]
macro_rules! bool_to_result {
($cond:expr, $ok:expr, $err:expr) => {{
match $cond {
true => Ok($ok),
false => Err($err),
}
}};
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter