kopia lustrzana https://github.com/simonw/datasette
Fixes for permissions debug page, closes #2278
rodzic
27409a7892
commit
26300738e3
|
@ -57,7 +57,7 @@ textarea {
|
|||
<p><label for="permission" style="display:block">Permission</label>
|
||||
<select name="permission" id="permission">
|
||||
{% for permission in permissions %}
|
||||
<option value="{{ permission.0 }}">{{ permission.name }} (default {{ permission.default }})</option>
|
||||
<option value="{{ permission.name }}">{{ permission.name }} (default {{ permission.default }})</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
<p><label for="resource_1">Database name</label><input type="text" id="resource_1" name="resource_1"></p>
|
||||
|
@ -71,19 +71,19 @@ textarea {
|
|||
|
||||
<script>
|
||||
var rawPerms = {{ permissions|tojson }};
|
||||
var permissions = Object.fromEntries(rawPerms.map(([label, abbr, needs_resource_1, needs_resource_2, def]) => [label, {needs_resource_1, needs_resource_2, def}]))
|
||||
var permissions = Object.fromEntries(rawPerms.map(p => [p.name, p]));
|
||||
var permissionSelect = document.getElementById('permission');
|
||||
var resource1 = document.getElementById('resource_1');
|
||||
var resource2 = document.getElementById('resource_2');
|
||||
function updateResourceVisibility() {
|
||||
var permission = permissionSelect.value;
|
||||
var {needs_resource_1, needs_resource_2} = permissions[permission];
|
||||
if (needs_resource_1) {
|
||||
var {takes_database, takes_resource} = permissions[permission];
|
||||
if (takes_database) {
|
||||
resource1.closest('p').style.display = 'block';
|
||||
} else {
|
||||
resource1.closest('p').style.display = 'none';
|
||||
}
|
||||
if (needs_resource_2) {
|
||||
if (takes_resource) {
|
||||
resource2.closest('p').style.display = 'block';
|
||||
} else {
|
||||
resource2.closest('p').style.display = 'none';
|
||||
|
|
|
@ -125,14 +125,14 @@ class PermissionsDebugView(BaseView):
|
|||
{
|
||||
"permission_checks": list(reversed(self.ds._permission_checks)),
|
||||
"permissions": [
|
||||
(
|
||||
p.name,
|
||||
p.abbr,
|
||||
p.description,
|
||||
p.takes_database,
|
||||
p.takes_resource,
|
||||
p.default,
|
||||
)
|
||||
{
|
||||
"name": p.name,
|
||||
"abbr": p.abbr,
|
||||
"description": p.description,
|
||||
"takes_database": p.takes_database,
|
||||
"takes_resource": p.takes_resource,
|
||||
"default": p.default,
|
||||
}
|
||||
for p in self.ds.permissions.values()
|
||||
],
|
||||
},
|
||||
|
@ -164,6 +164,7 @@ class PermissionsDebugView(BaseView):
|
|||
"permission": permission,
|
||||
"resource": resource,
|
||||
"result": result,
|
||||
"default": self.ds.permissions[permission].default,
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
@ -378,6 +378,13 @@ async def test_permissions_debug(ds_client):
|
|||
cookie = ds_client.actor_cookie({"id": "root"})
|
||||
response = await ds_client.get("/-/permissions", cookies={"ds_actor": cookie})
|
||||
assert response.status_code == 200
|
||||
# Should have a select box listing permissions
|
||||
for fragment in (
|
||||
'<select name="permission" id="permission">',
|
||||
'<option value="view-instance">view-instance (default True)</option>',
|
||||
'<option value="insert-row">insert-row (default False)</option>',
|
||||
):
|
||||
assert fragment in response.text
|
||||
# Should show one failure and one success
|
||||
soup = Soup(response.text, "html.parser")
|
||||
check_divs = soup.findAll("div", {"class": "check"})
|
||||
|
@ -673,6 +680,7 @@ async def test_actor_restricted_permissions(
|
|||
"permission": permission,
|
||||
"resource": expected_resource,
|
||||
"result": expected_result,
|
||||
"default": perms_ds.permissions[permission].default,
|
||||
}
|
||||
assert response.json() == expected
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue