@@ -13,8 +13,6 @@ import {PersonalMemberAddHelper} from "./PersonalMemberAddHelper.sol";
13
13
import {ExecuteSelectorCondition} from "../conditions/ExecuteSelectorCondition.sol " ;
14
14
import {EDITOR_PERMISSION_ID} from "../constants.sol " ;
15
15
16
- uint64 constant MEMBER_ADD_PROPOSAL_DURATION = 7 days ;
17
-
18
16
/// @title PersonalAdminSetup
19
17
/// @author Aragon - 2023
20
18
/// @notice The setup contract of the `PersonalAdminPlugin` plugin.
@@ -41,7 +39,7 @@ contract PersonalAdminSetup is PluginSetup {
41
39
bytes calldata _data
42
40
) external returns (address plugin , PreparedSetupData memory preparedSetupData ) {
43
41
// Decode `_data` to extract the params needed for cloning and initializing the `PersonalAdminPlugin` plugin.
44
- address editor = decodeInstallationParams (_data);
42
+ ( address editor , uint64 _memberAddProposalDuration ) = decodeInstallationParams (_data);
45
43
46
44
if (editor == address (0 )) {
47
45
revert EditorAddressInvalid ({editor: editor});
@@ -55,7 +53,7 @@ contract PersonalAdminSetup is PluginSetup {
55
53
PersonalAdminPlugin (plugin).initialize (IDAO (_dao), editor, helper);
56
54
57
55
PersonalMemberAddHelper.Settings memory _helperSettings = PersonalMemberAddHelper.Settings ({
58
- proposalDuration: MEMBER_ADD_PROPOSAL_DURATION
56
+ proposalDuration: _memberAddProposalDuration
59
57
});
60
58
PersonalMemberAddHelper (helper).initialize (IDAO (_dao), _helperSettings);
61
59
@@ -131,24 +129,49 @@ contract PersonalAdminSetup is PluginSetup {
131
129
SetupPayload calldata _payload
132
130
) external view returns (PermissionLib.MultiTargetPermission[] memory permissions ) {
133
131
// Prepare permissions
134
- permissions = new PermissionLib.MultiTargetPermission [](2 );
132
+ permissions = new PermissionLib.MultiTargetPermission [](5 );
135
133
136
- // Revoke EXECUTE on the DAO
134
+ // Revoke `EXECUTE_PERMISSION` to the plugin
137
135
permissions[0 ] = PermissionLib.MultiTargetPermission (
138
136
PermissionLib.Operation.Revoke,
139
137
_dao,
140
138
_payload.plugin,
141
139
PermissionLib.NO_CONDITION,
142
140
DAO (payable (_dao)).EXECUTE_PERMISSION_ID ()
143
141
);
144
- // Revoke conditional EXECUTE on the DAO
142
+ // Revoke `PROPOSER_PERMISSION` to the plugin
145
143
permissions[1 ] = PermissionLib.MultiTargetPermission (
144
+ PermissionLib.Operation.Revoke,
145
+ _payload.currentHelpers[0 ],
146
+ _payload.plugin,
147
+ PermissionLib.NO_CONDITION,
148
+ PersonalMemberAddHelper (helperImplementation).PROPOSER_PERMISSION_ID ()
149
+ );
150
+ // Revoke `EXECUTE_PERMISSION` to the helper
151
+ permissions[2 ] = PermissionLib.MultiTargetPermission (
146
152
PermissionLib.Operation.Revoke,
147
153
_dao,
148
154
_payload.currentHelpers[0 ],
149
- address (0 ),
155
+ // Conditional execution
156
+ PermissionLib.NO_CONDITION,
150
157
DAO (payable (_dao)).EXECUTE_PERMISSION_ID ()
151
158
);
159
+ // Revoke `ADD_MEMBER_PERMISSION` to the DAO
160
+ permissions[3 ] = PermissionLib.MultiTargetPermission (
161
+ PermissionLib.Operation.Revoke,
162
+ _payload.plugin,
163
+ _dao,
164
+ PermissionLib.NO_CONDITION,
165
+ PersonalAdminPlugin (pluginImplementation).ADD_MEMBER_PERMISSION_ID ()
166
+ );
167
+ // Revoke `UPDATE_SETTINGS_PERMISSION_ID` to the DAO
168
+ permissions[4 ] = PermissionLib.MultiTargetPermission (
169
+ PermissionLib.Operation.Revoke,
170
+ _payload.currentHelpers[0 ],
171
+ _dao,
172
+ PermissionLib.NO_CONDITION,
173
+ PersonalMemberAddHelper (helperImplementation).UPDATE_SETTINGS_PERMISSION_ID ()
174
+ );
152
175
}
153
176
154
177
/// @inheritdoc IPluginSetup
@@ -157,14 +180,17 @@ contract PersonalAdminSetup is PluginSetup {
157
180
}
158
181
159
182
/// @notice Encodes the given installation parameters into a byte array
160
- function encodeInstallationParams (address _initialEditor ) public pure returns (bytes memory ) {
161
- return abi.encode (_initialEditor);
183
+ function encodeInstallationParams (
184
+ address _initialEditor ,
185
+ uint64 _proposalDuration
186
+ ) public pure returns (bytes memory ) {
187
+ return abi.encode (_initialEditor, _proposalDuration);
162
188
}
163
189
164
190
/// @notice Decodes the given byte array into the original installation parameters
165
191
function decodeInstallationParams (
166
192
bytes memory _data
167
- ) public pure returns (address initialEditor ) {
168
- (initialEditor) = abi.decode (_data, (address ));
193
+ ) public pure returns (address initialEditor , uint64 proposalDuration ) {
194
+ (initialEditor, proposalDuration ) = abi.decode (_data, (address , uint64 ));
169
195
}
170
196
}
0 commit comments