pallet_permission0/permission/
curator.rs1use bitflags::bitflags;
2use codec::{Decode, Encode, MaxEncodedLen};
3use polkadot_sdk::{
4 frame_support::{CloneNoBound, DebugNoBound, EqNoBound, PartialEqNoBound},
5 polkadot_sdk_frame::prelude::BlockNumberFor,
6 sp_runtime::BoundedBTreeMap,
7};
8use scale_info::TypeInfo;
9
10use crate::Config;
11
12use super::PermissionId;
13
14#[derive(
15 CloneNoBound,
16 Copy,
17 DebugNoBound,
18 Encode,
19 Decode,
20 EqNoBound,
21 PartialEqNoBound,
22 TypeInfo,
23 MaxEncodedLen,
24)]
25pub struct CuratorPermissions(u32);
26
27bitflags! {
28 impl CuratorPermissions: u32 {
29 const ROOT = 0b0000_0001;
32 const APPLICATION_REVIEW = 0b0000_0010;
34 const WHITELIST_MANAGE = 0b0000_0100;
36 const PENALTY_CONTROL = 0b0000_1000;
38 const AGENT_FREEZING_TOGGLING = 0b0001_0000;
40 const NAMESPACE_FREEZING_TOGGLING = 0b0010_0000;
42 }
43}
44
45#[derive(Encode, Decode, CloneNoBound, PartialEq, TypeInfo, MaxEncodedLen, DebugNoBound)]
46#[scale_info(skip_type_params(T))]
47pub struct CuratorScope<T: Config> {
48 pub flags: BoundedBTreeMap<
49 Option<PermissionId>,
50 CuratorPermissions,
51 T::MaxCuratorSubpermissionsPerPermission,
52 >,
53 pub cooldown: Option<BlockNumberFor<T>>,
54}
55
56impl<T: Config> CuratorScope<T> {
57 pub fn has_permission(&self, permission: CuratorPermissions) -> bool {
58 self.flags.iter().any(|(_, p)| p.contains(permission))
59 }
60}
61
62impl<T: Config> CuratorScope<T> {
63 pub(crate) fn cleanup(
65 &self,
66 _permission_id: polkadot_sdk::sp_core::H256,
67 _last_execution: &Option<crate::BlockNumberFor<T>>,
68 _delegator: &T::AccountId,
69 ) {
70 }
72}