Capabilities
A group member’s capabilities are a u32 bitmask, carried as a Long in
Kotlin (so the full unsigned range stays a positive value). Capabilities exposes
the bit constants core assigns, plus helpers for reading and editing a mask. Use
them with the group capability methods on
mero.admin
(getMemberCapabilities, setMemberCapabilities, getDefaultCapabilities,
setDefaultCapabilities). The
groups & governance guide shows a
full flow.
Constants
Section titled “Constants”Core MemberCapabilities, bits 0–8 (all const val … : Long):
object Capabilities { const val CAN_CREATE_CONTEXT = 1L // 1 shl 0 const val CAN_INVITE_MEMBERS = 2L // 1 shl 1 const val CAN_JOIN_OPEN_SUBGROUPS = 4L // 1 shl 2 const val MANAGE_MEMBERS = 8L // 1 shl 3 const val MANAGE_APPLICATION = 16L // 1 shl 4 const val CAN_CREATE_SUBGROUP = 32L // 1 shl 5 const val CAN_DELETE_SUBGROUP = 64L // 1 shl 6 const val CAN_MANAGE_VISIBILITY = 128L // 1 shl 7 const val CAN_MANAGE_METADATA = 256L // 1 shl 8}Helpers
Section titled “Helpers”All normalize to the unsigned 32-bit range.
fun hasCap(mask: Long, cap: Long): Boolean // every bit of cap set?fun withCap(mask: Long, cap: Long): Long // mask with cap setfun withoutCap(mask: Long, cap: Long): Long // mask with cap clearedExample
Section titled “Example”import com.calimero.mero.Capabilities
// MemberCapabilities.capabilities is an Int; the helpers work on Long.val current = mero.admin.getMemberCapabilities(groupId, identity = id).capabilitiesvar mask = current.toLong()
if (!Capabilities.hasCap(mask, Capabilities.CAN_INVITE_MEMBERS)) { mask = Capabilities.withCap(mask, Capabilities.CAN_INVITE_MEMBERS) mask = Capabilities.withCap(mask, Capabilities.CAN_CREATE_SUBGROUP) mask = Capabilities.withoutCap(mask, Capabilities.CAN_MANAGE_METADATA) mero.admin.setMemberCapabilities( groupId, identity = id, SetMemberCapabilitiesRequest(capabilities = mask.toInt()) )}