Open MilSim.io
C2 Overview

Events And Attendance

Create and run standalone events, then record attendance with safe staff access.

Before You Create An Event

Events requires the community_events community feature. C2 shows its navigation entry to staff with events:read; the create page is available to staff with the create permission. A 402 feature limit reached response is a plan limit, not a missing role permission.

Choose a normal event for a published standalone activity. Use a draft when another staff member must check its details before it appears in the normal event list.

Create Or Draft An Event

  1. Open Events and select Create Event.
  2. Complete Details, Recurrence, Notifications, Notification timing, and Review.
  3. On Review, select Save draft or Publish.

The wizard will not proceed without an event name and date/time. Add description, image, and metadata only when attendees need them. Recurrence can be none, weekly, biweekly, or monthly; use an end date for a series that must stop. C2 rejects incompatible recurrence settings, including a monthly recurrence without a day of month.

ControlResultPermission checked by C2API evidence
Create EventOpens the wizard.events:createStandard event create derives events:create.
PublishCreates a normal event.events:createStandard event create derives events:create.
Save draftCreates a draft hidden from the normal list.events:create-draftsPOST /events/drafts explicitly requires events:create-drafts.
DraftsOpens the draft list.events:read-draftsGET /events/drafts explicitly requires events:read-drafts.

Notification choices

Turn on Notify, select a Discord channel and optionally a role, then choose a reminder amount in Hours or Days. Turning notifications off clears the selected channel and role in C2. Check the destination before saving: this may create an external Discord notification. The feature does not replace Discord Configuration; the community must already have a usable Discord connection.

Run Or Change An Event

Open an event from the list. Normal event details use events:read; drafts also require events:read-drafts.

ControlResultPermission checked by C2API evidence
ModifyOpens edit mode.events:updateThe update endpoint derives events:update.
Save edited normal eventSaves the normal event.events:createC2 checks create, not update, for this save path. Test this combination before assigning a least-privilege role.
Save edited draftSaves as a draft.events:create-draftsExplicit draft creation needs events:create-drafts.
Archive / UnarchiveToggles archived state.events:updatePUT /events/:id/archive explicitly requires events:update.
Lock / UnlockToggles the event lock.events:updateC2 sends an event update; confirm the operational meaning of lock with your staff process.
DeletePermanently removes the event after confirmation.events:deleteStandard delete derives events:delete.
Save recurrenceUpdates recurrence settings.No explicit C2 check foundC2 calls a standard event update; verify with a test staff role before relying on it.

Archive rather than delete when the record may be needed for attendance, reporting, or audit context. Locking is reversible, but should be agreed by the operations team before use.

Record Attendance

Event detail shows summary and unit views. In the unit view, choose a bulk status to apply one status to all listed members, or select Manage to change people one at a time. These controls stay disabled until C2 has both members and attendance statuses.

The current C2 condition for changing attendance is unusually strict: it requires both events:manage-attendance and campaign-events:manage-attendance, even on a standalone event. Give both to the attendance role until C2 is changed or tested otherwise.

Verification required: CommunityAttendanceRecordController has no explicit permission annotation on staff record and bulk endpoints; it relies on generic enforcement. The C2 UI condition above is exact, but test it in the deployed release before making it the final access policy.

Create attendance statuses

Open Events → Attendance statuses. This area needs the community_attendance_status feature. The sidebar accepts either attendance-statuses:read or the legacy attendance_status:read; use the key shown by the C2 permission picker for the community.

ControlResultPermission checked by C2
CreateAdds a status staff can apply.attendance-statuses:create
EditChanges a status.attendance-statuses:update
DeleteRemoves a status after confirmation.attendance-statuses:delete

Do not delete a status until staff have checked reporting and active event records that use it. Deletion is destructive.

Access Checklist

JobMinimum known keys
Event readerevents:read
Event plannerevents:read, events:create; add events:create-drafts and events:read-drafts for drafts
Event managerPlanner keys plus events:update; add events:delete only to staff allowed to remove records
Attendance recorderevents:read, events:manage-attendance, campaign-events:manage-attendance, and the attendance-status read key

Related: Campaigns And Calendar, Roles And Permissions, and Errors And Troubleshooting.

Copyright © 2026