Permissions Bitmask System
Uranus uses a 64-bit integer bitmask to represent user permissions across different scopes:
- Organizer
- Venue
- Space
- Event
This boolean flag model and enables:
- extremely fast permission checks with bitwise operations\
- link-specific permissions (e.g., organizer-link, venue-link)\
- flexible future expansion (bits 32--63 reserved)
Permissions are stored in:
uranus.user_organizer_link.permissions
uranus.user_venue_link.permissions
uranus.user_space_link.permissions
uranus.user_event_link.permissions
Bitmask Layout (64-bit Integer)
| Bit Range | Group | Description |
|---|---|---|
| 0 – 7 | Organizer | Permissions for managing organizers |
| 8 – 15 | Venue | Permissions for managing venues |
| 16 – 23 | Space | Permissions for managing venue spaces |
| 24 – 31 | Event | Permissions for managing events |
| 32 – 63 | Reserved | Reserved for future features |
Permission Reference
Organizer Permissions (Bits 0--7)
| Name | Bit | Hex Mask | Description |
|---|---|---|---|
| EditOrganizer | 0 | 0x00000001 | Edit organizer settings |
| DeleteOrganizer | 1 | 0x00000002 | Delete an organizer |
| ChooseAsEventOrganizer | 2 | 0x00000004 | Select organizer for events |
| ChooseAsEventPartner | 3 | 0x00000008 | Add organizer as event partner |
| CanReceiveOrganizerMessages | 4 | 0x00000010 | Can recieve messages sent to the organizer |
| ManagePermissions | 5 | 0x00000020. | Can set and remove permissions for linked users |
Venue Permissions (Bits 8--15)
| Name | Bit | Hex Mask | Description |
|---|---|---|---|
| AddVenue | 8 | 0x00000100 | Create new venues |
| EditVenue | 9 | 0x00000200 | Edit venue details |
| DeleteVenue | 10 | 0x00000400 | Remove existing venue |
| ChooseVenue | 11 | 0x00000800 | Assign venue when making events |
Space Permissions (Bits 16--23)
| Name | Bit | Hex Mask | Description |
|---|---|---|---|
| AddSpace | 16 | 0x00010000 | Add spaces to venues |
| EditSpace | 17 | 0x00020000 | Modify venue spaces |
| DeleteSpace | 18 | 0x00040000 | Remove venue spaces |
Event Permissions (Bits 24--31)
| Name | Bit | Hex Mask | Description |
|---|---|---|---|
| AddEvent | 24 | 0x01000000 | Create events |
| EditEvent | 25 | 0x02000000 | Modify events |
| DeleteEvent | 26 | 0x04000000 | Delete events |
| ReleaseEvent | 27 | 0x08000000 | Publish events |
| ViewEventInsights | 28 | 0x10000000 | View event insights & analytics |
PostgreSQL Utilities
Check whether a permission is present
CREATE OR REPLACE FUNCTION has_permission(mask BIGINT, perm BIGINT)
RETURNS BOOLEAN AS $$
SELECT (mask & perm) = perm;
$$ LANGUAGE sql IMMUTABLE;
Add a permission
UPDATE uranus.user_venue_link
SET permissions = permissions | (1 << 11)
WHERE user_id = $1 AND venue_id = $2;
Remove a permission
UPDATE uranus.user_organizer_link
SET permissions = permissions & ~(1 << 1)
WHERE user_id = $1 AND organizer_id = $2;
3322 2222 2222 1111 1111 11 1098 7654 3210 9876 5432 1098 7654 3210
b 0000 0000 0000 0000 0000 0000 0000 0000
b 0001 1111 0000 0111 0000 1111 0000 1111 Admin 520556303 b 0001 1111 0000 0111 0000 1111 0000 1101 Manager 520556301 b 0001 1111 0000 0010 0000 0010 0000 1101 Assistent b 0001 1111 0000 0010 0000 0010 0000 0000 Venue Manager b 0001 1111 0000 0000 0000 0000 0000 0000 Booker 520093696 b 0001 0000 0000 0000 0000 0000 0000 0000 Insight Viewer b 0001 0010 0000 0000 0000 0000 0000 0000 Event Proofreader b 0000 0000 0000 0010 0000 0000 0000 0000 Space Manager