Admin pages answering who may do what (ADR-041 §7): roles, permissions and a user's rights. Pure Hiccup in the admin shell; plain forms that post and redirect.
Admin pages answering who may do what (ADR-041 §7): roles, permissions and a user's rights. Pure Hiccup in the admin shell; plain forms that post and redirect.
(action-table headers rows)A table whose last column holds each row's actions, as the admin's lists have it.
A table whose last column holds each row's actions, as the admin's lists have it.
(asking-form kind
action
registry
scope-keys
{:keys [permission record]}
&
inputs)The form posting to action a permission on a record, kind :explain
or :grant (BOU-853): granting asks no everywhere, an empty scope is
everywhere. inputs go before its button.
The form posting to `action` a permission on a record, `kind` `:explain` or `:grant` (BOU-853): granting asks no `everywhere`, an empty scope is everywhere. `inputs` go before its button.
(asking-params permission record)permission on record, {scope-key value} or :everywhere, as the asking
forms post them.
`permission` on `record`, {scope-key value} or `:everywhere`, as the asking
forms post them.(assignment-sentence {:keys [group-id group-name role scope expires-at]}
roles
scope-info)assignment, {:group-id :group-name :role :scope :expires-at}, as a
sentence: "Sales may edit orders within Department Noord". roles:
{role-name role} as list-roles gives them, to read a code role's level.
`assignment`, {:group-id :group-name :role :scope :expires-at}, as a
sentence: "Sales may edit orders within Department Noord". `roles`:
{role-name role} as `list-roles` gives them, to read a code role's level.(create-modal id title opts form)The form a list's New button opens; open at once when it was refused.
The form a list's New button opens; open at once when it was refused.
This module's pages for a user, beside the admin's edit page. The admin's
:users config names this var as its :detail-tabs; {id} is the user's.
This module's pages for a user, beside the admin's edit page. The admin's
`:users` config names this var as its `:detail-tabs`; `{id}` is the user's.(effective-scope-view scope {:keys [labels]})A resolved scope, {key #{value}}, as text.
A resolved scope, {key #{value}}, as text.
(entity-lookup-url entity)Where the admin answers lookups of entity's rows: by text, or one by ?id=.
Where the admin answers lookups of `entity`'s rows: by text, or one by ?id=.
(expiry-date expires-at)The UTC date expires-at, an Instant, falls on: what an expiry is entered
and shown as (BOU-856).
The UTC date `expires-at`, an Instant, falls on: what an expiry is entered and shown as (BOU-856).
(expiry-input id value)The optional expiry date of a membership or assignment, posted as expires-at.
The optional expiry date of a membership or assignment, posted as `expires-at`.
(expiry-note expires-at)"expires on 2026-11-15", or nil for access that does not end.
"expires on 2026-11-15", or nil for access that does not end.
(explain-page user result opts)Why user may or may not use the permission asked, result as
explain-access gives it, nil before one is asked. opts: :asked
{:permission :record}, :registry the permissions to pick from,
:scope-info as scope-view reads it.
Why `user` may or may not use the permission asked, `result` as
`explain-access` gives it, nil before one is asked. `opts`: `:asked`
{:permission :record}, `:registry` the permissions to pick from,
`:scope-info` as `scope-view` reads it.(explain-path user-id permission record)The explain page for user-id, asking permission on record: {scope-key
value}, or :everywhere for a route without a scope.
The explain page for `user-id`, asking `permission` on `record`: {scope-key
value}, or `:everywhere` for a route without a scope.Who a permission would refuse, and the smallest fix for each (BOU-853).
Who a permission would refuse, and the smallest fix for each (BOU-853).
(grant-path user-id permission scope)The grant wizard for user-id, giving permission in scope, {scope-key
value}, {} or nil for everywhere (BOU-853).
The grant wizard for `user-id`, giving `permission` in `scope`, {scope-key
value}, {} or nil for everywhere (BOU-853).(header crumbs heading & actions)Breadcrumbs, crumbs [label href] pairs, the page's actions and heading.
Breadcrumbs, `crumbs` [label href] pairs, the page's `actions` and `heading`.
(hidden-fields params)params, form params, as hidden inputs: a vector is one per value.
`params`, form params, as hidden inputs: a vector is one per value.
A code role's level, as role-level names it, as a badge says it.
A code role's level, as `role-level` names it, as a badge says it.
(list-fragment spec items table-query)What a list's own search and sort get back: the table, the count out of band.
What a list's own search and sort get back: the table, the count out of band.
(list-page title intro content opts)A list in the admin shell, title in its topbar, intro above it.
A list in the admin shell, `title` in its topbar, `intro` above it.
(list-row href attrs columns cells)A list row opening href: its cells under the columns labels, the
title link first, a chevron last.
A list row opening `href`: its `cells` under the `columns` labels, the title link first, a chevron last.
(list-view {:keys [id url placeholder signals] :as spec}
items
table-query
&
actions)A list as the admin's entity lists have it: count, search and actions
over the sortable table.
A list as the admin's entity lists have it: count, search and `actions` over the sortable table.
(module-of x module)The module x belongs to: its declared module, else its name's namespace.
The module `x` belongs to: its declared `module`, else its name's namespace.
(page title content opts)content in the admin shell, title in its topbar.
`content` in the admin shell, `title` in its topbar.
(permission-groups registry held)registry permissions {p {:label :module}} by module, each
[module-name [[p label checked?] ..]], sorted; held permissions the
registry lacks come last under nil.
`registry` permissions {p {:label :module}} by module, each
[module-name [[p label checked?] ..]], sorted; `held` permissions the
registry lacks come last under nil.(permission-items registry roles assignments)The registry's permissions as permissions-list lists them, each with its
hygiene/permission-signals over assignments.
The registry's permissions as `permissions-list` lists them, each with its `hygiene/permission-signals` over `assignments`.
(permission-module registry p)The module registry places permission p in.
The module `registry` places permission `p` in.
(permission-page permission {:keys [label module]} roles holders opts)One permission: the roles holding it, and the groups and users holding those.
One permission: the roles holding it, and the groups and users holding those.
The permissions list, by module, each permission with the roles holding
it. Its items are {:permission :label :module :roles}; see
permission-items.
The permissions list, by module, each permission with the roles holding
it. Its items are {:permission :label :module :roles}; see
`permission-items`.(permissions-page items opts)The registry by module, each permission with the roles holding it.
items as permission-items gives them; (:table-query opts) searches
and sorts them.
The registry by module, each permission with the roles holding it. `items` as `permission-items` gives them; `(:table-query opts)` searches and sorts them.
(preview-page preview {:keys [action fields back scope-info] :as opts})What a change does to effective rights before it is made, preview as
preview-change gives it, with a form posting (:fields opts) to
(:action opts) again, confirmed. (:back opts): where cancel goes.
What a change does to effective rights before it is made, `preview` as `preview-change` gives it, with a form posting `(:fields opts)` to `(:action opts)` again, confirmed. `(:back opts)`: where cancel goes.
(preview-sections {:keys [user permissions affected affected-count everyone?]}
scope-info)What a change does to effective rights, preview as preview-change
gives it: the named user's gains and losses, and the other users'.
What a change does to effective rights, `preview` as `preview-change` gives it: the named user's gains and losses, and the other users'.
(rights-page user groups grants opts)user's groups, each with where the membership comes from, and their
effective permissions, each with the group, role and scope it comes from.
grants as user-grants gives them; (:scope-info opts) as scope-view
reads it; (:registry opts), the declared permissions, places each in its
module; (:roles opts), as role-index gives them, words each assignment.
(:platform-admin? opts): the user passes every check. (:changes opts):
the timeline of changes to their rights (BOU-855).
`user`'s groups, each with where the membership comes from, and their effective permissions, each with the group, role and scope it comes from. `grants` as `user-grants` gives them; `(:scope-info opts)` as `scope-view` reads it; `(:registry opts)`, the declared permissions, places each in its module; `(:roles opts)`, as `role-index` gives them, words each assignment. `(:platform-admin? opts)`: the user passes every check. `(:changes opts)`: the timeline of changes to their rights (BOU-855).
(role-index roles)roles, as list-roles gives them, by name.
`roles`, as `list-roles` gives them, by name.
(role-level {:keys [name source]})"viewer", "editor" or "manager" for one of a module's code roles,
role as list-roles gives it; nil for any other role.
"viewer", "editor" or "manager" for one of a module's code roles, `role` as `list-roles` gives it; nil for any other role.
(role-page {:keys [name description permissions source] :as role}
registry
holders
opts)One role: a code role read-only with a form to duplicate it, a managed one editable; then who holds it.
One role: a code role read-only with a form to duplicate it, a managed one editable; then who holds it.
The roles list: by module, like the permissions.
The roles list: by module, like the permissions.
(roles-page roles registry opts)Code roles, locked, and managed ones, by module, with a form to compose a
new one from the registry's permissions. (:table-query opts) searches
and sorts them.
Code roles, locked, and managed ones, by module, with a form to compose a new one from the registry's permissions. `(:table-query opts)` searches and sorts them.
(scope-view scope {:keys [labels entities sources resolved]})A stored scope as text. info: {:labels {key label} :entities {key entity}
:sources {source label} :resolved {[key source] values-or-:error}}, the
last when the scope is a user's.
A stored scope as text. `info`: {:labels {key label} :entities {key entity}
:sources {source label} :resolved {[key source] values-or-:error}}, the
last when the scope is a user's.(section title & content)content in a card under title. A map first is the section's attributes.
`content` in a card under `title`. A map first is the section's attributes.
(signal-badges signals item)A badge per signal in signals, as wagoe.user.core.hygiene gives them
for item.
A badge per signal in `signals`, as `wagoe.user.core.hygiene` gives them for `item`.
(table headers rows)A table of rows under headers.
A table of `rows` under `headers`.
(user-tabs user-id active)A user's pages as tabs: the admin's edit page, then detail-tabs, the one
whose :key is active marked.
A user's pages as tabs: the admin's edit page, then `detail-tabs`, the one whose :key is `active` marked.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |