@@ -48,14 +48,14 @@ pub fn setup_roles_sized<T: Config>(pallet_id: IdOrVec, num_roles: u32, size: u3
48
48
}
49
49
50
50
pub fn setup_scopes_sized < T : Config > ( pallet_id : IdOrVec , num_scopes : u32 ) -> Vec < ScopeId > {
51
- let mut scopes = Vec :: new ( ) ;
51
+ let mut scope_ids = Vec :: new ( ) ;
52
52
for s in 0 ..num_scopes {
53
53
let scope = generate_scope_sized ( s as u8 , 10 ) ;
54
54
let scope_id = generate_id ( scope) ;
55
55
assert_ok ! ( RBAC :: <T >:: create_scope( pallet_id. clone( ) , scope_id) ) ;
56
- scopes . push ( scope_id) ;
56
+ scope_ids . push ( scope_id) ;
57
57
}
58
- scopes
58
+ scope_ids
59
59
}
60
60
61
61
pub fn assign_roles_to_user < T : Config > (
@@ -78,13 +78,15 @@ pub fn assign_roles_to_user<T: Config>(
78
78
pub fn assign_roles_to_users < T : Config > (
79
79
num_users : u32 ,
80
80
pallet_id : IdOrVec ,
81
- scope_id : ScopeId ,
81
+ scope_ids : Vec < ScopeId > ,
82
82
role_ids : & [ RoleId ] ,
83
83
) -> Vec < T :: AccountId > {
84
84
let mut users = Vec :: new ( ) ;
85
85
for u in 0 ..num_users {
86
86
let user: T :: AccountId = account ( "user" , u, SEED ) ;
87
- assign_roles_to_user :: < T > ( user. clone ( ) , pallet_id. clone ( ) , scope_id, role_ids) ;
87
+ for scope_id in scope_ids. clone ( ) {
88
+ assign_roles_to_user :: < T > ( user. clone ( ) , pallet_id. clone ( ) , scope_id, role_ids) ;
89
+ }
88
90
users. push ( user) ;
89
91
}
90
92
users
@@ -104,17 +106,19 @@ pub fn generate_permissions_sized(num_permissions: u32, size: u32) -> Vec<Vec<u8
104
106
105
107
pub fn setup_permissions_sized < T : Config > (
106
108
pallet_id : IdOrVec ,
107
- role_id : RoleId ,
109
+ role_ids : Vec < RoleId > ,
108
110
num_permissions : u32 ,
109
111
size : u32 ,
110
112
) -> Vec < PermissionId > {
111
113
let permissions = generate_permissions_sized ( num_permissions, size) ;
112
- assert_ok ! ( RBAC :: <T >:: tx_create_and_set_permissions(
113
- RawOrigin :: Root . into( ) ,
114
- pallet_id. clone( ) ,
115
- role_id. clone( ) ,
116
- permissions. clone( )
117
- ) ) ;
114
+ for role_id in role_ids {
115
+ assert_ok ! ( RBAC :: <T >:: tx_create_and_set_permissions(
116
+ RawOrigin :: Root . into( ) ,
117
+ pallet_id. clone( ) ,
118
+ role_id. clone( ) ,
119
+ permissions. clone( )
120
+ ) ) ;
121
+ }
118
122
permissions. into_iter ( ) . map ( |permission| generate_id ( permission) ) . collect ( )
119
123
}
120
124
@@ -158,7 +162,8 @@ mod benchmarks {
158
162
) ;
159
163
let ru = r as usize ;
160
164
let user =
161
- assign_roles_to_users :: < T > ( u, pallet_id. clone ( ) , scope_id, & role_ids[ 0 ..ru] ) [ 0 ] . clone ( ) ;
165
+ assign_roles_to_users :: < T > ( u, pallet_id. clone ( ) , vec ! [ scope_id] , & role_ids[ 0 ..ru] ) [ 0 ]
166
+ . clone ( ) ;
162
167
let role_id = role_ids[ ru - 1 ] ;
163
168
#[ extrinsic_call]
164
169
_ ( RawOrigin :: Root , user. clone ( ) , pallet_id. clone ( ) , scope_id, role_id) ;
@@ -199,7 +204,7 @@ mod benchmarks {
199
204
T :: RoleMaxLen :: get ( ) ,
200
205
) ;
201
206
let ru = r as usize ;
202
- assign_roles_to_users :: < T > ( u, pallet_id. clone ( ) , scope_id, & role_ids[ 0 ..ru] ) ;
207
+ assign_roles_to_users :: < T > ( u, pallet_id. clone ( ) , vec ! [ scope_id] , & role_ids[ 0 ..ru] ) ;
203
208
assign_roles_to_user :: < T > (
204
209
user. clone ( ) ,
205
210
pallet_id. clone ( ) ,
@@ -228,14 +233,52 @@ mod benchmarks {
228
233
T :: MaxRolesPerPallet :: get ( ) ,
229
234
T :: RoleMaxLen :: get ( ) ,
230
235
) [ 0 ] ;
231
- let permission_id = setup_permissions_sized :: < T > ( pallet_id. clone ( ) , role_id, p, l) [ 0 ] ;
236
+ let permission_id = setup_permissions_sized :: < T > ( pallet_id. clone ( ) , vec ! [ role_id] , p, l) [ 0 ] ;
232
237
#[ extrinsic_call]
233
238
_ ( RawOrigin :: Root , pallet_id. clone ( ) , role_id, permission_id) ;
234
239
assert ! (
235
240
!RBAC :: <T >:: permissions_by_role( pallet_id. to_id( ) , role_id) . contains( & permission_id)
236
241
) ;
237
242
}
238
243
244
+ #[ benchmark]
245
+ fn remove_permission_from_pallet (
246
+ i : Linear < 1 , 400 > ,
247
+ l : Linear < 2 , { T :: PermissionMaxLen :: get ( ) } > ,
248
+ p : Linear < 1 , { T :: MaxPermissionsPerRole :: get ( ) } > ,
249
+ m : Linear < 2 , { T :: RoleMaxLen :: get ( ) } > ,
250
+ r : Linear < 1 , { T :: MaxRolesPerPallet :: get ( ) } > ,
251
+ ) {
252
+ let pallet_id = generate_pallet_id_sized ( 0 , i) ;
253
+ let role_ids = setup_roles_sized :: < T > ( pallet_id. clone ( ) , r, m) ;
254
+ let permission_id = setup_permissions_sized :: < T > ( pallet_id. clone ( ) , role_ids, p, l) [ 0 ] ;
255
+ #[ extrinsic_call]
256
+ _ ( RawOrigin :: Root , pallet_id. clone ( ) , permission_id) ;
257
+ assert_eq ! ( RBAC :: <T >:: permissions( pallet_id. to_id( ) , permission_id) . len( ) , 0 ) ;
258
+ }
259
+
260
+ #[ benchmark]
261
+ fn remove_pallet_permissions (
262
+ i : Linear < 1 , 400 > ,
263
+ l : Linear < 2 , { T :: PermissionMaxLen :: get ( ) } > ,
264
+ s : Linear < 1 , { T :: MaxScopesPerPallet :: get ( ) } > ,
265
+ p : Linear < 1 , { T :: MaxPermissionsPerRole :: get ( ) } > ,
266
+ u : Linear < 1 , { T :: MaxUsersPerRole :: get ( ) } > ,
267
+ m : Linear < 2 , { T :: RoleMaxLen :: get ( ) } > ,
268
+ r : Linear < 1 , { T :: MaxRolesPerPallet :: get ( ) } > ,
269
+ ) {
270
+ let pallet_id = generate_pallet_id_sized ( 0 , i) ;
271
+ let scope_ids = setup_scopes_sized :: < T > ( pallet_id. clone ( ) , s) ;
272
+ let role_ids = setup_roles_sized :: < T > ( pallet_id. clone ( ) , r, m) ;
273
+ setup_permissions_sized :: < T > ( pallet_id. clone ( ) , role_ids. clone ( ) , p, l) ;
274
+ let ru = cmp:: min ( r, T :: MaxRolesPerUser :: get ( ) ) as usize ;
275
+ assign_roles_to_users :: < T > ( u, pallet_id. clone ( ) , scope_ids, & role_ids[ 0 ..ru] ) ;
276
+
277
+ #[ extrinsic_call]
278
+ _ ( RawOrigin :: Root , pallet_id. clone ( ) ) ;
279
+ assert_eq ! ( <Permissions <T >>:: iter_prefix( pallet_id. to_id( ) ) . count( ) , 0 ) ;
280
+ }
281
+
239
282
impl_benchmark_test_suite ! {
240
283
RBAC ,
241
284
crate :: mock:: new_test_ext( ) ,
0 commit comments