From 73014abe8b63182842208d72d61e785bbf84d084 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sun, 26 Oct 2025 16:53:49 -0700 Subject: [PATCH] Improved permissions UI WIP --- datasette/app.py | 6 +- .../templates/_permissions_debug_tabs.html | 53 +++++++++ .../{actions.html => debug_actions.html} | 5 +- datasette/templates/debug_allowed.html | 9 +- datasette/templates/debug_check.html | 98 +++++----------- ...html => debug_permissions_playground.html} | 63 ++++++---- datasette/templates/debug_rules.html | 4 +- datasette/views/special.py | 111 +++++++++--------- tests/test_api.py | 10 +- tests/test_html.py | 57 ++++++++- 10 files changed, 249 insertions(+), 167 deletions(-) create mode 100644 datasette/templates/_permissions_debug_tabs.html rename datasette/templates/{actions.html => debug_actions.html} (91%) rename datasette/templates/{permissions_debug.html => debug_permissions_playground.html} (67%) diff --git a/datasette/app.py b/datasette/app.py index f141ed45..bfbf2360 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -1835,7 +1835,11 @@ class Datasette: ) add_route( JsonDataView.as_view( - self, "actions.json", self._actions, template="actions.html" + self, + "actions.json", + self._actions, + template="debug_actions.html", + permission="permissions-debug", ), r"/-/actions(\.(?Pjson))?$", ) diff --git a/datasette/templates/_permissions_debug_tabs.html b/datasette/templates/_permissions_debug_tabs.html new file mode 100644 index 00000000..ab8be1fb --- /dev/null +++ b/datasette/templates/_permissions_debug_tabs.html @@ -0,0 +1,53 @@ +{% if has_debug_permission %} +{% set query_string = '?' + request.query_string if request.query_string else '' %} + + + + +{% endif %} diff --git a/datasette/templates/actions.html b/datasette/templates/debug_actions.html similarity index 91% rename from datasette/templates/actions.html rename to datasette/templates/debug_actions.html index b4285d79..6dd5ac0e 100644 --- a/datasette/templates/actions.html +++ b/datasette/templates/debug_actions.html @@ -3,7 +3,10 @@ {% block title %}Registered Actions{% endblock %} {% block content %} -

Registered Actions

+

Registered actions

+ +{% set current_tab = "actions" %} +{% include "_permissions_debug_tabs.html" %}

This Datasette instance has registered {{ data|length }} action{{ data|length != 1 and "s" or "" }}. diff --git a/datasette/templates/debug_allowed.html b/datasette/templates/debug_allowed.html index c3688e26..e3dc5250 100644 --- a/datasette/templates/debug_allowed.html +++ b/datasette/templates/debug_allowed.html @@ -9,8 +9,10 @@ {% endblock %} {% block content %} +

Allowed resources

-

Allowed Resources

+{% set current_tab = "allowed" %} +{% include "_permissions_debug_tabs.html" %}

Use this tool to check which resources the current actor is allowed to access for a given permission action. It queries the /-/allowed.json API endpoint.

@@ -225,9 +227,6 @@ function displayResults(data) { // Update raw JSON document.getElementById('raw-json').innerHTML = jsonFormatHighlight(data); - - // Scroll to results - resultsContainer.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } function displayError(data) { @@ -238,8 +237,6 @@ function displayError(data) { resultsContent.innerHTML = `
Error: ${escapeHtml(data.error || 'Unknown error')}
`; document.getElementById('raw-json').innerHTML = jsonFormatHighlight(data); - - resultsContainer.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); } // Disable child input if parent is empty diff --git a/datasette/templates/debug_check.html b/datasette/templates/debug_check.html index 47fce5cb..da990985 100644 --- a/datasette/templates/debug_check.html +++ b/datasette/templates/debug_check.html @@ -4,35 +4,9 @@ {% block extra_head %} +{% include "_permission_ui_styles.html" %} {% include "_debug_common_functions.html" %} {% endblock %} {% block content %} +

Permission check

-

Permission Check

+{% set current_tab = "check" %} +{% include "_permissions_debug_tabs.html" %}

Use this tool to test permission checks for the current actor. It queries the /-/check.json API endpoint.

@@ -105,32 +65,36 @@

Current actor: anonymous (not logged in)

{% endif %} -
-
- - - The permission action to check -
+
+ +
+ + + The permission action to check +
-
- - - For database-level permissions, specify the database name -
+
+ + + For database-level permissions, specify the database name +
-
- - - For table-level permissions, specify the table name (requires parent) -
+
+ + + For table-level permissions, specify the table name (requires parent) +
- - +
+ +
+ +