09985f8a95
this implements first version (manageable only by admin right now)
routes:
GET /api/groups
List subject groups (paginated). Admin-only.
POST /api/groups
Create a new ReBAC subject group. Admin-only. The name must match the RFC 5321 local-part shape and be globally unique (case-insensitive).
GET /api/groups/search
Search non-virtual groups by name substring. Authenticated only (no admin role required) — backs the share-dialog recipient autocomplete.
GET /api/groups/{id}
Fetch a single group's details. Admin-only.
DELETE /api/groups/{id}
Delete a group. Cascades to `subject_group_members` (FK) and to `access_grants` rows referencing this group as a subject. Admin-only.
PATCH /api/groups/{id}
Update a group's metadata. Admin-only. v1 only persists name renames.
GET /api/groups/{id}/effective-members
List every user transitively reached through this group (members of members of members, etc.). Used by admin / audit tooling. Admin-only.
GET /api/groups/{id}/members
List the *direct* members of a group (one level only). Admin-only.
POST /api/groups/{id}/members
Add a member to a group. Exactly one of `user_id` / `group_id` must be provided. Adding a group-member runs a write-time cycle check and a nesting-depth check (max 8). Admin-only.
DELETE /api/groups/{id}/members/group/{gid}
Remove a nested group-member from a group. Admin-only.
DELETE /api/groups/{id}/members/user/{uid}
Remove a user-member from a group. Admin-only.
fix hurl
groups
round
groups
41 lines
1.4 KiB
CSS
41 lines
1.4 KiB
CSS
/* Base */
|
|
@import url("./base/variables.css");
|
|
|
|
@import url("./base/reset.css");
|
|
@import url("./base/forms.css");
|
|
|
|
/* Layout */
|
|
@import url("./layout/sidebar.css");
|
|
@import url("./layout/topbar.css");
|
|
@import url("./layout/content.css");
|
|
|
|
/* Components */
|
|
@import url("./components/breadcrumb.css");
|
|
@import url("./components/buttons.css");
|
|
@import url("./components/fileType.css");
|
|
@import url("./components/fileManager.css");
|
|
@import url("./components/resourceList.css");
|
|
@import url("./components/expiryChip.css");
|
|
@import url("./components/roleChip.css");
|
|
@import url("./components/contextMenu.css");
|
|
@import url("./components/dialogs.css");
|
|
@import url("./components/modals.css");
|
|
@import url("./components/shareDialog.css");
|
|
@import url("./components/shareModal.css");
|
|
@import url("./components/groupsModal.css");
|
|
@import url("./components/userVignette.css");
|
|
@import url("./components/linkChip.css");
|
|
@import url("./components/uploadDropdown.css");
|
|
@import url("./components/notifications.css");
|
|
@import url("./components/userMenu.css");
|
|
@import url("./components/languageSelector.css");
|
|
@import url("./components/batchToolbar.css");
|
|
@import url("./components/spinner.css");
|
|
@import url("./components/search.css");
|
|
@import url("./components/icons.css");
|
|
@import url("./components/csp-utilities.css");
|
|
@import url("./components/itemTooltip.css");
|
|
|
|
/* Theme */
|
|
@import url("./themes/dark.css");
|