Skip to content

Commit 4374b53

Browse files
committed
Add AccessManagerEnumerable
1 parent 04e683b commit 4374b53

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
// SPDX-License-Identifier: MIT
2+
3+
pragma solidity ^0.8.20;
4+
5+
import {AccessManager} from "../AccessManager.sol";
6+
import {EnumerableSet} from "../../../utils/structs/EnumerableSet.sol";
7+
8+
abstract contract AccessManagerEnumerable is AccessManager {
9+
using EnumerableSet for EnumerableSet.AddressSet;
10+
mapping(uint64 roleId => EnumerableSet.AddressSet) private _roleMembers;
11+
12+
function _grantRole(
13+
uint64 roleId,
14+
address account,
15+
uint32 grantDelay,
16+
uint32 executionDelay
17+
) internal override returns (bool) {
18+
bool granted = super._grantRole(roleId, account, grantDelay, executionDelay);
19+
if (granted) {
20+
_roleMembers[roleId].add(account);
21+
}
22+
return granted;
23+
}
24+
25+
function _revokeRole(uint64 roleId, address account) internal override returns (bool) {
26+
bool revoked = super._revokeRole(roleId, account);
27+
if (revoked) {
28+
_roleMembers[roleId].remove(account);
29+
}
30+
return revoked;
31+
}
32+
33+
function getRoleMembers(uint64 roleId, uint256 start, uint256 end) public view returns (address[] memory) {
34+
return _roleMembers[roleId].values(start, end);
35+
}
36+
37+
function getRoleMemberCount(uint64 roleId) public view returns (uint256) {
38+
return _roleMembers[roleId].length();
39+
}
40+
}

0 commit comments

Comments
 (0)