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};
7use scale_info::TypeInfo;
8
9use crate::Config;
10
11#[derive(
12 CloneNoBound,
13 Copy,
14 DebugNoBound,
15 Encode,
16 Decode,
17 EqNoBound,
18 PartialEqNoBound,
19 TypeInfo,
20 MaxEncodedLen,
21)]
22pub struct CuratorPermissions(u32);
23
24bitflags! {
25 impl CuratorPermissions: u32 {
26 const ROOT = 0b0000_0001;
29 const APPLICATION_REVIEW = 0b0000_0010;
31 const WHITELIST_MANAGE = 0b0000_0100;
33 const PENALTY_CONTROL = 0b0000_1000;
35 const AGENT_FREEZING_TOGGLING = 0b0001_0000;
37 const NAMESPACE_FREEZING_TOGGLING = 0b0010_0000;
39 }
40}
41
42#[derive(Encode, Decode, CloneNoBound, PartialEq, TypeInfo, MaxEncodedLen, DebugNoBound)]
43#[scale_info(skip_type_params(T))]
44pub struct CuratorScope<T: Config> {
45 pub flags: CuratorPermissions,
46 pub cooldown: Option<BlockNumberFor<T>>,
47}
48
49impl<T: Config> CuratorScope<T> {
50 pub fn has_permission(&self, permission: CuratorPermissions) -> bool {
51 self.flags.contains(permission)
52 }
53
54 pub fn can_review_applications(&self) -> bool {
56 self.has_permission(CuratorPermissions::APPLICATION_REVIEW)
57 }
58
59 pub fn can_manage_whitelist(&self) -> bool {
61 self.has_permission(CuratorPermissions::WHITELIST_MANAGE)
62 }
63
64 pub fn can_control_penalties(&self) -> bool {
66 self.has_permission(CuratorPermissions::PENALTY_CONTROL)
67 }
68}
69
70impl<T: Config> CuratorScope<T> {
71 pub(crate) fn cleanup(
73 &self,
74 _permission_id: polkadot_sdk::sp_core::H256,
75 _last_execution: &Option<crate::BlockNumberFor<T>>,
76 _grantor: &T::AccountId,
77 ) {
78 }
80}