@@ -214,15 +214,15 @@ public fun initial_admin_role_name(): String {
214214/// Records are added sequentially with auto-assigned sequence numbers.
215215///
216216/// TODO: Add capability parameter and permission check once implemented
217- public fun add_record <D : store + copy >(
217+ public fun trail_add_record <D : store + copy >(
218218 trail: &mut AuditTrail <D >,
219219 cap: &Capability ,
220220 stored_data: D ,
221221 record_metadata: Option <String >,
222222 clock: &Clock ,
223223 ctx: &mut TxContext ,
224224) {
225- // TODO: check_permission (trail, cap, &permissions ::record_add(), ctx );
225+ assert ! (trail. has_capability_permission ( cap, &permission ::record_add ()), EPermissionDenied );
226226
227227 let caller = ctx.sender ();
228228 let timestamp = clock::timestamp_ms (clock);
@@ -368,7 +368,12 @@ public fun trail_has_record<D: store + copy>(trail: &AuditTrail<D>, sequence_num
368368 linked_table::contains (&trail.records, sequence_number)
369369}
370370
371- // ===== Role and Capability related Functions =====
371+ /// Returns all records of the audit trail
372+ public fun trail_records <D : store + copy >(trail: &AuditTrail <D >): &LinkedTable <u64 , Record <D >> {
373+ &trail.records
374+ }
375+
376+ // ===== Role related Functions =====
372377
373378/// Get the permissions associated with a specific role.
374379/// Aborts with ERoleDoesNotExist if the role does not exist.
@@ -380,6 +385,58 @@ public fun trail_get_role_permissions<D: store + copy>(
380385 vec_map::get (&trail.roles, role)
381386}
382387
388+ /// Create a new role consisting of a role name and associated permissions
389+ public fun trail_create_role <D : store + copy >(
390+ trail: &mut AuditTrail <D >,
391+ cap: &Capability ,
392+ role: String ,
393+ permissions: VecSet <Permission >,
394+ _ctx: &mut TxContext ,
395+ ) {
396+ assert ! (trail.has_capability_permission (cap, &permission::roles_add ()), EPermissionDenied );
397+ vec_map::insert (&mut trail.roles, role, permissions);
398+ }
399+
400+ /// Delete an existing role
401+ public fun trail_delete_role <D : store + copy >(
402+ trail: &mut AuditTrail <D >,
403+ cap: &Capability ,
404+ role: &String ,
405+ _ctx: &mut TxContext ,
406+ ) {
407+ assert ! (trail.has_capability_permission (cap, &permission::roles_delete ()), EPermissionDenied );
408+ vec_map::remove (&mut trail.roles, role);
409+ }
410+
411+ /// Update permissions associated with an existing role
412+ public fun trail_update_role_permissions <D : store + copy >(
413+ trail: &mut AuditTrail <D >,
414+ cap: &Capability ,
415+ role: &String ,
416+ new_permissions: VecSet <Permission >,
417+ _ctx: &mut TxContext ,
418+ ) {
419+ assert ! (trail.has_capability_permission (cap, &permission::roles_update ()), EPermissionDenied );
420+ assert ! (vec_map::contains (&trail.roles, role), ERoleDoesNotExist );
421+ vec_map::insert (&mut trail.roles, *role, new_permissions);
422+ }
423+
424+ /// Returns the roles defined in the audit trail
425+ public fun trail_roles <D : store + copy >(trail: &AuditTrail <D >): &VecMap <String , VecSet <Permission >> {
426+ &trail.roles
427+ }
428+
429+ /// Indicates if the specified role exists in the audit trail
430+ public fun trail_has_role <D : store + copy >(
431+ trail: &AuditTrail <D >,
432+ role: &String ,
433+ ): bool {
434+ vec_map::contains (&trail.roles, role)
435+ }
436+
437+
438+ // ===== Capability related Functions =====
439+
383440/// Indicates if a provided capability has a specific permission.
384441public fun trail_has_capability_permission <D : store + copy >(
385442 trail: &AuditTrail <D >,
@@ -389,7 +446,7 @@ public fun trail_has_capability_permission<D: store + copy>(
389446 assert ! (trail.id () == cap.trail_id (), ETrailIdNotCorrect );
390447 let permissions = trail.get_role_permissions (cap.role ());
391448 vec_set::contains (permissions, permission)
392- }
449+ }
393450
394451/// Create a new capability with a specific role
395452public fun trail_new_capability <D : store + copy >(
@@ -429,48 +486,14 @@ public fun trail_revoke_capability<D: store + copy>(
429486 // TODO: Implement revocation logic (e.g., remove from issued_capability set)
430487}
431488
432- /// Create a new role consisting of a role name and associated permissions
433- public fun trail_create_role <D : store + copy >(
434- trail: &mut AuditTrail <D >,
435- cap: &Capability ,
436- role: String ,
437- permissions: VecSet <Permission >,
438- _ctx: &mut TxContext ,
439- ) {
440- assert ! (trail.has_capability_permission (cap, &permission::roles_add ()), EPermissionDenied );
441- vec_map::insert (&mut trail.roles, role, permissions);
442- }
443-
444- /// Delete an existing role
445- public fun trail_delete_role <D : store + copy >(
446- trail: &mut AuditTrail <D >,
447- cap: &Capability ,
448- role: &String ,
449- _ctx: &mut TxContext ,
450- ) {
451- assert ! (trail.has_capability_permission (cap, &permission::roles_delete ()), EPermissionDenied );
452- vec_map::remove (&mut trail.roles, role);
453- }
454-
455- /// Update permissions associated with an existing role
456- public fun trail_update_role_permissions <D : store + copy >(
457- trail: &mut AuditTrail <D >,
458- cap: &Capability ,
459- role: &String ,
460- new_permissions: VecSet <Permission >,
461- _ctx: &mut TxContext ,
462- ) {
463- assert ! (trail.has_capability_permission (cap, &permission::roles_update ()), EPermissionDenied );
464- assert ! (vec_map::contains (&trail.roles, role), ERoleDoesNotExist );
465- vec_map::insert (&mut trail.roles, *role, new_permissions);
466- }
467-
468489// ===== public use statements =====
469490
470491public use fun trail_id as AuditTrail .id;
471492public use fun trail_creator as AuditTrail .creator;
472493public use fun trail_created_at as AuditTrail .created_at;
494+ public use fun trail_add_record as AuditTrail .add_record;
473495public use fun trail_record_count as AuditTrail .record_count;
496+ public use fun trail_records as AuditTrail .records;
474497public use fun trail_name as AuditTrail .name;
475498public use fun trail_description as AuditTrail .description;
476499public use fun trail_metadata as AuditTrail .metadata;
@@ -480,11 +503,13 @@ public use fun trail_first_sequence as AuditTrail.first_sequence;
480503public use fun trail_last_sequence as AuditTrail .last_sequence;
481504public use fun trail_get_record as AuditTrail .get_record;
482505public use fun trail_has_record as AuditTrail .has_record;
483- public use fun trail_get_role_permissions as AuditTrail .get_role_permissions;
484506public use fun trail_has_capability_permission as AuditTrail .has_capability_permission;
485507public use fun trail_new_capability as AuditTrail .new_capability;
486508public use fun trail_destroy_capability as AuditTrail .destroy_capability;
487509public use fun trail_revoke_capability as AuditTrail .revoke_capability;
510+ public use fun trail_get_role_permissions as AuditTrail .get_role_permissions;
488511public use fun trail_create_role as AuditTrail .create_role;
489512public use fun trail_delete_role as AuditTrail .delete_role;
490513public use fun trail_update_role_permissions as AuditTrail .update_role_permissions;
514+ public use fun trail_roles as AuditTrail .roles;
515+ public use fun trail_has_role as AuditTrail .has_role;
0 commit comments