pub use crate::{
access_control,
access_control::{
extensions::enumerable,
members,
},
traits::access_control::{
extensions::enumerable::*,
*,
},
};
pub use access_control::Internal as _;
use openbrush::{
storage::{
MultiMapping,
ValueGuard,
},
traits::{
AccountId,
OccupiedStorage,
Storage,
},
};
pub const STORAGE_KEY: u32 = openbrush::storage_unique_key!(Members);
#[derive(Default, Debug)]
#[openbrush::upgradeable_storage(STORAGE_KEY)]
pub struct Members {
pub role_members: MultiMapping<RoleType, AccountId, ValueGuard<RoleType>>,
pub _reserved: Option<()>,
}
impl members::MembersManager for Members {
fn has_role(&self, role: RoleType, address: &AccountId) -> bool {
self.role_members.contains_value(role, address)
}
fn add(&mut self, role: RoleType, member: &AccountId) {
self.role_members.insert(role, member);
}
fn remove(&mut self, role: RoleType, member: &AccountId) {
self.role_members.remove_value(role, member);
}
}
impl<T> AccessControlEnumerable for T
where
T: Storage<access_control::Data<Members>>,
T: OccupiedStorage<{ access_control::STORAGE_KEY }, WithData = access_control::Data<Members>>,
{
default fn get_role_member(&self, role: RoleType, index: u32) -> Option<AccountId> {
self.data().members.role_members.get_value(role, &(index as u128))
}
default fn get_role_member_count(&self, role: RoleType) -> u32 {
self.data().members.role_members.count(role) as u32
}
}