multiversx_sc_modules/
only_admin.rs

1multiversx_sc::imports!();
2
3#[multiversx_sc::module]
4pub trait OnlyAdminModule {
5    #[view(isAdmin)]
6    fn is_admin(&self, address: ManagedAddress) -> bool {
7        self.admins().contains(&address)
8    }
9
10    #[only_owner]
11    #[endpoint(addAdmin)]
12    fn add_admin(&self, address: ManagedAddress) {
13        self.admins().insert(address);
14        // TODO: event
15    }
16
17    #[only_owner]
18    #[endpoint(removeAdmin)]
19    fn remove_admin(&self, address: ManagedAddress) {
20        self.admins().swap_remove(&address);
21        // TODO: event
22    }
23
24    #[view(getAdmins)]
25    #[storage_mapper("only_admin_module:admins")]
26    fn admins(&self) -> UnorderedSetMapper<ManagedAddress>;
27
28    fn require_caller_is_admin(&self) {
29        require!(
30            self.is_admin(self.blockchain().get_caller()),
31            "Endpoint can only be called by admins"
32        );
33    }
34}