Project

General

Profile

Actions

Epic #49

open

Implement user, groups and permissions management

Epic #49: Implement user, groups and permissions management

Added by Bricklou 8 months ago. Updated 4 days ago.

Status:
Planned
Priority:
Normal
Assigned To:
Target version:
Start date:
02/04/2026
Due date:
% Done:

43%

Estimated time:
(Total: 0:00 h)

Description

Anyone with an account can currently do anything the platform exposes. Administrators need to decide who may do what, and people who own a server need to share access to it without handing over the whole installation.

This epic covers what the platform knows how to authorise, who can be given access, how access is given, how it is decided and enforced, how it can be understood afterwards, how accounts are administered, and how agents and modules prove who they are.

The model, in short:

  • A permission is a named capability, for example "restart a Minecraft server". Permissions are contributed by the platform itself and by installed modules.
  • A role is a reusable named set of permissions. A group is a named set of users and holds no permissions of its own.
  • Access is given by granting a role, or a hand-picked set of permissions, to a user or a group — either across the whole platform or on one specific object.
  • Three states exist: allowed, denied, not set. Not set is not the same as denied.
  • The grant closest to the object decides. Within one place, an entry naming the person beats one naming a group they are in, and a denial beats an allowance. Anything not decided is refused.
  • Administrators (holders of the all-permissions role) are never refused, and the last of them cannot be removed.
  • Nobody can give away access they do not hold themselves.

Out of scope here, tracked separately: folders and the inheritance that comes with them, storing and browsing an audit trail (this epic only emits the events), bulk operations (#305), and hosting several organisations on one installation.

Full specification: kubestro-permissions-report.md.


Files

kubestro-permissions-report.md kubestro-permissions-report.md 29.5 KB Bricklou, 09/16/2026 11:00 PM

Subtasks 67 (40 open — 27 closed)

Feature #125: User ManagementRejected03/28/2026

Actions
User Story #132: As an administrator, I want to create user accounts, so that new users can access the systemRejected03/28/2026

Actions
User Story #133: As an administrator, I want to edit user information, so that I can keep user data currentRejected03/28/2026

Actions
User Story #134: As an administrator, I want to delete users, so that I can remove them from the systemRejected03/28/2026

Actions
User Story #135: As an administrator, I want to ban/deactivate users, so that they lose access without data lossRejected03/28/2026

Actions
Feature #126: Group ManagementRejected02/04/2026

Actions
User Story #51: As an administrator, I want to create groups/role to organizeRejectedBricklou02/04/2026

Actions
User Story #53: As an administrator, I want to assign users to one or more groupsRejectedBricklou02/04/2026

Actions
User Story #136: As an administrator, I want to create groups/roles, so that I can organize permissions efficientlyRejected03/28/2026

Actions
User Story #137: As an administrator, I want to edit groups, so that I can update their detailsRejected03/28/2026

Actions
User Story #138: As an administrator, I want to delete groups, so that I can remove obsolete groupsRejected03/28/2026

Actions
Feature #127: Permission AssignmentRejected02/04/2026

Actions
User Story #52: As an administrator, I want to assign permissions to groups so I can manage access efficientlyRejectedBricklou02/04/2026

Actions
User Story #54: As an administrator, I want to assign specific permissions directly to users for exceptional casesRejectedBricklou02/04/2026

Actions
User Story #59: As an administrator, I want predefined role templates for common user typesRejectedBricklou02/04/2026

Actions
Feature #128: Permission EnforcementRejected02/04/2026

Actions
User Story #56: As a system, I want to enforce permissions on all protected resourcesRejectedBricklou02/04/2026

Actions
User Story #57: As a user, I want the UI to hide actions I don't have permission to performRejectedBricklou02/04/2026

Actions
Feature #129: Permission ResolutionRejected02/04/2026

Actions
User Story #60: As an administrator, I want clear rules for handling permission conflictsRejectedBricklou02/04/2026

Actions
Feature #130: Permission VerificationRejected02/04/2026

Actions
User Story #55: As an administrator, I want to view a user's effective permissions to verify their access levelRejectedBricklou02/04/2026

Actions
User Story #61: As an administrator, I want to perform bulk operations on users and groupsRejectedBricklou02/04/2026

Actions
Feature #131: Audit & ComplianceRejected02/04/2026

Actions
User Story #58: As an administrator, I want to see an audit log of permission changes for complianceRejectedBricklou02/04/2026

Actions
Feature #139: How are permissions defined in the system?Rejected03/28/2026

Actions
Feature #265: Permission catalogPlannedBricklou

Actions
User Story #275: As an administrator, I want to browse every permission the platform knows about, so that I can build roles from real capabilitiesPlannedBricklou

Actions
User Story #276: As an operator, I want the platform's own permissions to be available on a fresh install, so that roles can be built before any module is addedPlannedBricklou

Actions
User Story #277: As a module author, I want my module to declare its own permissions when it connects, so that its features can be granted without changing the platformPlannedBricklou

Actions
User Story #278: As an administrator, I want uninstalling a module to take its permissions and the access granted through them with it, so that nothing dangling is left behindPlannedBricklou

Actions
Feature #266: RolesPlannedBricklou09/20/2026

Actions
User Story #279: As an administrator, I want to create, edit and delete roles, so that I can describe access once and reuse itPlannedBricklou

Actions
User Story #280: As an operator, I want a protected Administrator role to exist from the start, so that the installation always has someone who can run itIn ProgressBricklou09/20/2026

Actions
User Story #281: As an administrator, I want ready-made starter roles, so that I can give sensible access without designing it from scratchRejectedBricklou

Actions
Feature #267: GroupsPlannedBricklou

Actions
User Story #282: As an administrator, I want to create, edit and delete groups, so that I can hand out access to a team instead of to each personPlannedBricklou

Actions
User Story #283: As an administrator, I want to manage who belongs to a group, so that access follows people joining and leaving a teamPlannedBricklou

Actions
Feature #268: Granting accessPlannedBricklou

Actions
User Story #284: As an administrator, I want to give a role to a person or a group across the whole platform, so that they can do their job everywhere it appliesPlannedBricklou

Actions
User Story #285: As the owner of a server, I want to share it with someone, so that they can help me run it without getting access to anything elsePlannedBricklou

Actions
User Story #286: As the owner of a server, I want to deny one capability to one person, so that they keep the rest of the access their team hasPlannedBricklou

Actions
User Story #287: As an administrator, I want to revoke access I previously gave, so that people lose it the moment they shouldPlannedBricklou

Actions
User Story #288: As an operator, I want nobody to be able to hand out access they do not hold, so that managing access cannot be used to become an administratorPlannedBricklou

Actions
Feature #269: Access decision and enforcementPlannedBricklou

Actions
User Story #289: As an operator, I want every protected action checked before it runs, so that access rules cannot be bypassed by choosing another way inPlannedBricklou

Actions
User Story #290: As an administrator, I want one predictable answer when several grants apply at once, so that access never depends on the order things were set up inPlannedBricklou

Actions
User Story #291: As an administrator, I want a change to access to take effect straight away, so that revoking someone actually stops themPlannedBricklou

Actions
Feature #270: Understanding accessPlannedBricklou

Actions
User Story #292: As an administrator, I want to see everything a person can do and where it came from, so that I can check their access at a glancePlannedBricklou

Actions
User Story #293: As an administrator, I want to ask why one person was allowed or refused one action, so that I can fix access instead of guessingPlannedBricklou

Actions
User Story #294: As the owner of a server, I want to see who has access to it and how, so that I can tell whether it is shared more widely than I thoughtPlannedBricklou

Actions
User Story #295: As a user, I want the interface to only offer me what I can actually do, so that I am not led into refusalsPlannedBricklou

Actions
Feature #271: User administrationPlannedBricklou

Actions
User Story #296: As an administrator, I want to find and inspect accounts, so that I can work out who someone is before changing their accessPlannedBricklou

Actions
User Story #297: As an administrator, I want to correct someone's account details, so that the platform reflects realityPlannedBricklou

Actions
User Story #298: As an administrator, I want to suspend and reactivate an account, so that I can cut someone off without losing anythingPlannedBricklou

Actions
User Story #299: As an administrator, I want deleting an account to be reversible for a while and then final, so that a mistake costs nothing and a departure leaves nothing behindPlannedBricklou

Actions
Feature #272: Agent identityPlannedBricklou

Actions
User Story #300: As an administrator, I want to enrol a new node with a one-off token, so that only nodes I invited can joinPlannedBricklou

Actions
User Story #301: As an administrator, I want to list, rotate and revoke node credentials, so that a decommissioned or compromised node loses access immediatelyPlannedBricklou

Actions
Feature #273: Module identityPlannedBricklou

Actions
User Story #302: As an operator, I want the platform to be sure which module it is talking to, so that nothing else on the machine can pretend to be onePlannedBricklou

Actions
User Story #303: As an administrator, I want to see when a module acted on its own, so that automated changes are not attributed to nobodyPlannedBricklou

Actions
Feature #274: Change events for accessPlannedBricklou

Actions
User Story #304: As an operator, I want every change to access to announce itself, so that an audit trail can be built on it laterPlannedBricklou

Actions
Feature #305: Bulk operations on users and groups (to be specified)PlannedBricklou

Actions

Related issues 2 (2 open — 0 closed)

Blocks Server - User Story #264: As an administrator, I want to create a user account directly with a temporary password, so that I can onboard someone without sending an emailPlannedBricklou

Actions
Blocks Server - User Story #263: As an administrator, I want to invite a new user by email, so that they can activate their own accountPlannedBricklou

Actions

Updated by Bricklou 8 months ago Author Actions #1

  • Subtask #50 added

Updated by Bricklou 8 months ago Author Actions #2

  • Subtask #51 added

Updated by Bricklou 8 months ago Author Actions #3

  • Subtask #52 added

Updated by Bricklou 8 months ago Author Actions #4

  • Subtask #53 added

Updated by Bricklou 8 months ago Author Actions #5

  • Subtask #54 added

Updated by Bricklou 8 months ago Author Actions #6

  • Subtask #55 added

Updated by Bricklou 8 months ago Author Actions #7

  • Subtask #56 added

Updated by Bricklou 8 months ago Author Actions #8

  • Subtask #57 added

Updated by Bricklou 8 months ago Author Actions #9

  • Subtask #58 added

Updated by Bricklou 8 months ago Author Actions #10

  • Subtask #59 added

Updated by Bricklou 8 months ago Author Actions #11

  • Subtask #60 added

Updated by Bricklou 8 months ago Author Actions #12

  • Subtask #61 added

Updated by Bricklou 6 months ago Author Actions #13

  • Project changed from Kubestro to Server

Updated by Bricklou 6 months ago Author Actions #14

  • Tracker changed from Feature to Bug
  • Status changed from Draft to New
  • Start date deleted (02/04/2026)
  • Regression set to No
  • Blocking set to No

Updated by Bricklou 6 months ago Author Actions #15

  • Subtask #125 added

Updated by Bricklou 6 months ago Author Actions #16

  • Subtask #126 added

Updated by Bricklou 6 months ago Author Actions #17

  • Subtask #127 added

Updated by Bricklou 6 months ago Author Actions #18

  • Subtask #128 added

Updated by Bricklou 6 months ago Author Actions #19

  • Subtask #129 added

Updated by Bricklou 6 months ago Author Actions #20

  • Subtask #130 added

Updated by Bricklou 6 months ago Author Actions #21

  • Subtask #131 added

Updated by Bricklou 6 months ago Author Actions #22

  • Tracker changed from Bug to Epic
  • Status changed from New to Draft
  • Start date set to 02/04/2026
  • % Done set to 0
  • Regression deleted (No)
  • Blocking deleted (No)

Updated by Bricklou 6 months ago Author Actions #23

  • Subtask deleted (#51)

Updated by Bricklou 6 months ago Author Actions #24

  • Subtask deleted (#53)

Updated by Bricklou 6 months ago Author Actions #25

  • Subtask deleted (#52)

Updated by Bricklou 6 months ago Author Actions #26

  • Subtask deleted (#54)

Updated by Bricklou 6 months ago Author Actions #27

  • Subtask deleted (#59)

Updated by Bricklou 6 months ago Author Actions #28

  • Subtask deleted (#56)

Updated by Bricklou 6 months ago Author Actions #29

  • Subtask deleted (#57)

Updated by Bricklou 6 months ago Author Actions #30

  • Subtask deleted (#60)

Updated by Bricklou 6 months ago Author Actions #31

  • Subtask deleted (#55)

Updated by Bricklou 6 months ago Author Actions #32

  • Subtask deleted (#61)

Updated by Bricklou 6 months ago Author Actions #33

  • Subtask deleted (#58)

Updated by Bricklou 6 months ago Author Actions #34

  • Subtask #139 added

Updated by Bricklou 6 months ago Author Actions #35

  • Subtask deleted (#50)

Updated by Bricklou 15 days ago Author Actions #36

Design note from the #163-adjacent authorization work (moving permission checks into use cases instead of only at the API layer):

Agents are controlled through the API, the same way kubelets are controlled through a kube-apiserver — they're command-executors, not independent actors that evaluate user permissions themselves. The control plane (this API) decides authorization before ever issuing work to an Agent. Consequences for this epic's design:

  • Permission checking never needs to be shared with or verified by Agents at all — it stays fully centralized in the API, the same way Kubernetes RBAC never runs on the kubelet.
  • Agent trust is a separate axis: agent identity/authentication (analogous to kube's Node authorization / bootstrap tokens / client certs), not permission-checking. An Agent needs to prove it's a legitimate registered Agent of this control plane; it never needs to know what a human user is allowed to do.
  • Still open for this epic: the Agent registration/handshake protocol and what credential an Agent authenticates with — a separate problem from user permission-checking.

Also: permissions should be modeled as open, string-identified capabilities each module declares locally (e.g. "users:manage"), not a single shared enum — a closed enum in one crate has the same fixed-set problem a role enum has, just one level up, and doesn't let future modules define their own permissions without touching shared code.

Updated by Bricklou 15 days ago Author Actions #37

  • Blocks User Story #264: As an administrator, I want to create a user account directly with a temporary password, so that I can onboard someone without sending an email added

Updated by Bricklou 15 days ago Author Actions #38

  • Blocks User Story #263: As an administrator, I want to invite a new user by email, so that they can activate their own account added

Updated by Bricklou 9 days ago Author Actions #39

  • Description updated (diff)
  • Status changed from Draft to To Do

Updated by Bricklou 9 days ago Author Actions #40

  • Subtask #265 added

Updated by Bricklou 9 days ago Author Actions #41

  • Subtask #266 added

Updated by Bricklou 9 days ago Author Actions #42

  • Subtask #267 added

Updated by Bricklou 9 days ago Author Actions #43

  • Subtask #268 added

Updated by Bricklou 9 days ago Author Actions #44

  • Subtask #269 added

Updated by Bricklou 9 days ago Author Actions #45

  • Subtask #270 added

Updated by Bricklou 9 days ago Author Actions #46

  • Subtask #271 added

Updated by Bricklou 9 days ago Author Actions #47

  • Subtask #272 added

Updated by Bricklou 9 days ago Author Actions #48

  • Subtask #273 added

Updated by Bricklou 9 days ago Author Actions #49

  • Subtask #274 added

Updated by Bricklou 9 days ago Author Actions #50

Updated by Bricklou 9 days ago Author Actions #51

  • File deleted (kubestro-permissions-report.md)

Updated by Bricklou 9 days ago Author Actions #52

  • Description updated (diff)

Updated by Bricklou 9 days ago Author Actions #53

  • Description updated (diff)

Updated by Bricklou 9 days ago Author Actions #54

  • Description updated (diff)

Updated by Bricklou 8 days ago Author Actions #55

  • Status changed from To Do to Planned
  • Target version set to Server 0.1.0
  • Start date deleted (02/04/2026)

Updated by Bricklou 5 days ago Author Actions #56

  • Subtask #305 added
Actions

Also available in: PDF Atom