Skip to content

Commit c029e29

Browse files
committed
Add access control check for AuditTrail.update_metadata() and delete_record_lock
1 parent 600ae26 commit c029e29

File tree

3 files changed

+46
-23
lines changed

3 files changed

+46
-23
lines changed

audit-trail-move/sources/audit_trail.move

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
module audit_trail::main;
1111

1212
use audit_trail::capability::{Self, Capability};
13-
use audit_trail::locking::{Self, LockingConfig};
13+
use audit_trail::locking::{Self, LockingConfig, LockingWindow, set_delete_record_lock};
1414
use audit_trail::permission::{Self, Permission};
1515
use audit_trail::record::{Self, Record};
1616
use iota::clock::{Self, Clock};
@@ -217,8 +217,6 @@ public fun initial_admin_role_name(): String {
217217
/// Add a record to the trail
218218
///
219219
/// Records are added sequentially with auto-assigned sequence numbers.
220-
///
221-
/// TODO: Add capability parameter and permission check once implemented
222220
public fun trail_add_record<D: store + copy>(
223221
trail: &mut AuditTrail<D>,
224222
cap: &Capability,
@@ -256,7 +254,7 @@ public fun trail_add_record<D: store + copy>(
256254
// ===== Locking =====
257255

258256
/// Check if a record is locked (cannot be deleted)
259-
public fun is_record_locked<D: store + copy>(
257+
public fun trail_is_record_locked<D: store + copy>(
260258
trail: &AuditTrail<D>,
261259
sequence_number: u64,
262260
clock: &Clock,
@@ -276,22 +274,29 @@ public fun is_record_locked<D: store + copy>(
276274
}
277275

278276
/// Update the locking configuration
279-
///
280-
/// TODO: Add capability parameter and permission check once implemented
281-
public fun update_locking_config<D: store + copy>(
277+
public fun trail_update_locking_config<D: store + copy>(
282278
trail: &mut AuditTrail<D>,
283279
cap: &Capability,
284280
new_config: LockingConfig,
285281
_ctx: &mut TxContext,
286282
) {
287-
// TODO: check_permission(trail, cap, &permissions::locking_update(), ctx);
283+
assert!(trail.has_capability_permission(cap, &permission::update_locking_config()), EPermissionDenied);
288284
trail.locking_config = new_config;
289285
}
290286

291-
// ===== Metadata =====
287+
/// Update the `delete_record_lock` locking configuration
288+
public fun trail_update_locking_config_for_delete_record<D: store + copy>(
289+
trail: &mut AuditTrail<D>,
290+
cap: &Capability,
291+
new_delete_record_lock: LockingWindow,
292+
_ctx: &mut TxContext,
293+
) {
294+
assert!(trail.has_capability_permission(cap, &permission::update_locking_config_for_delete_record()), EPermissionDenied);
295+
set_delete_record_lock(&mut trail.locking_config, new_delete_record_lock);
296+
}
292297

293298
/// Update the trail's mutable metadata
294-
public fun update_metadata<D: store + copy>(
299+
public fun trail_update_metadata<D: store + copy>(
295300
trail: &mut AuditTrail<D>,
296301
cap: &Capability,
297302
new_metadata: Option<String>,
@@ -511,6 +516,10 @@ public use fun trail_name as AuditTrail.name;
511516
public use fun trail_description as AuditTrail.description;
512517
public use fun trail_metadata as AuditTrail.metadata;
513518
public use fun trail_locking_config as AuditTrail.locking_config;
519+
public use fun trail_update_locking_config as AuditTrail.update_locking_config;
520+
public use fun trail_is_record_locked as AuditTrail.is_record_locked;
521+
public use fun trail_update_locking_config_for_delete_record as AuditTrail.update_locking_config_for_delete_record;
522+
public use fun trail_update_metadata as AuditTrail.update_metadata;
514523
public use fun trail_is_empty as AuditTrail.is_empty;
515524
public use fun trail_first_sequence as AuditTrail.first_sequence;
516525
public use fun trail_last_sequence as AuditTrail.last_sequence;

audit-trail-move/sources/locking.move

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,13 @@ public fun delete_record_lock(config: &LockingConfig): &LockingWindow {
9999
&config.delete_record_lock
100100
}
101101

102+
// ===== LockingConfig Setters =====
103+
104+
/// Set the record deletion locking window
105+
public(package) fun set_delete_record_lock(config: &mut LockingConfig, window: LockingWindow) {
106+
config.delete_record_lock = window;
107+
}
108+
102109
// ===== Locking Logic (LockingWindow) =====
103110

104111
/// Check if a record is locked based on time window

audit-trail-move/sources/permission.move

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ public enum Permission has copy, drop, store {
2222

2323

2424
// --- Locking Config - Proposed role: `LockingAdmin` ---
25-
/// Edit the delete_lock configuration for records
26-
ConfigRecordDeleteLock,
27-
/// Edit the delete_lock configuration for the whole Audit Trail
28-
ConfigTrailDeleteLock,
29-
25+
/// Update the whole locking configuration
26+
UpdateLockingConfig,
27+
/// Update the delete_record_lock configuration which is part of the locking configuration
28+
UpdateLockingConfigForDeleteRecord,
29+
/// Update the delete_lock configuration for the whole Audit Trail
30+
UpdateLockingConfigForDeleteTrail,
3031

3132
// --- Role Management - Proposed role: `RoleAdmin` ---
3233
/// Add new roles with associated permissions
@@ -102,8 +103,9 @@ public fun record_admin_permissions(): VecSet<Permission> {
102103
/// Create permissions typical used for the `LockingAdmin` role
103104
public fun locking_admin_permissions(): VecSet<Permission> {
104105
let mut perms = vec_set::empty();
105-
perms.insert(config_record_delete_lock());
106-
perms.insert(config_trail_delete_lock());
106+
perms.insert(update_locking_config());
107+
perms.insert(update_locking_config_for_delete_trail());
108+
perms.insert(update_locking_config_for_delete_record());
107109
perms
108110
}
109111

@@ -154,14 +156,19 @@ public fun correct_record(): Permission {
154156
Permission::CorrectRecord
155157
}
156158

157-
/// Returns a permission allowing to edit the delete_lock configuration for records
158-
public fun config_record_delete_lock(): Permission {
159-
Permission::ConfigRecordDeleteLock
159+
/// Returns a permission allowing to update the whole locking configuration
160+
public fun update_locking_config(): Permission {
161+
Permission::UpdateLockingConfig
162+
}
163+
164+
/// Returns a permission allowing to update the delete_lock configuration for records
165+
public fun update_locking_config_for_delete_record(): Permission {
166+
Permission::UpdateLockingConfigForDeleteRecord
160167
}
161168

162-
/// Returns a permission allowing to edit the delete_lock configuration for the whole Audit Trail
163-
public fun config_trail_delete_lock(): Permission {
164-
Permission::ConfigTrailDeleteLock
169+
/// Returns a permission allowing to update the delete_lock configuration for the whole Audit Trail
170+
public fun update_locking_config_for_delete_trail(): Permission {
171+
Permission::UpdateLockingConfigForDeleteTrail
165172
}
166173

167174
/// Returns a permission allowing to add new roles with associated permissions

0 commit comments

Comments
 (0)