mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
permission_allowed_default_allow_sql
This commit is contained in:
parent
8bb07f80b1
commit
28a69d19a2
1 changed files with 25 additions and 1 deletions
|
|
@ -170,6 +170,22 @@ async def permission_allowed_sql_bridge(datasette, actor, action, resource):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
@hookimpl(tryfirst=True, specname="permission_allowed")
|
||||||
|
def permission_allowed_default_allow_sql(datasette, actor, action, resource):
|
||||||
|
"""
|
||||||
|
Enforce the default_allow_sql setting for execute-sql permission.
|
||||||
|
|
||||||
|
When default_allow_sql is set to False, deny all execute-sql permissions.
|
||||||
|
This runs before other permission checks to ensure the setting is respected.
|
||||||
|
"""
|
||||||
|
if action == "execute-sql":
|
||||||
|
default_allow_sql_setting = datasette.setting("default_allow_sql")
|
||||||
|
# Handle both boolean False and string "false" (from CLI)
|
||||||
|
if default_allow_sql_setting in (False, "false"):
|
||||||
|
return False
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
@hookimpl(tryfirst=True, specname="permission_allowed")
|
@hookimpl(tryfirst=True, specname="permission_allowed")
|
||||||
def permission_allowed_root(datasette, actor, action, resource):
|
def permission_allowed_root(datasette, actor, action, resource):
|
||||||
"""
|
"""
|
||||||
|
|
@ -211,7 +227,9 @@ async def permission_resources_sql(datasette, actor, action):
|
||||||
rules.extend(config_rules)
|
rules.extend(config_rules)
|
||||||
|
|
||||||
# Check default_allow_sql setting for execute-sql action
|
# Check default_allow_sql setting for execute-sql action
|
||||||
if action == "execute-sql" and not datasette.setting("default_allow_sql"):
|
default_allow_sql_setting = datasette.setting("default_allow_sql")
|
||||||
|
# Handle both boolean False and string "false" (from CLI)
|
||||||
|
if action == "execute-sql" and default_allow_sql_setting in (False, "false"):
|
||||||
# Return a deny rule for all databases
|
# Return a deny rule for all databases
|
||||||
sql = "SELECT NULL AS parent, NULL AS child, 0 AS allow, 'default_allow_sql is false' AS reason"
|
sql = "SELECT NULL AS parent, NULL AS child, 0 AS allow, 'default_allow_sql is false' AS reason"
|
||||||
rules.append(
|
rules.append(
|
||||||
|
|
@ -221,6 +239,12 @@ async def permission_resources_sql(datasette, actor, action):
|
||||||
params={},
|
params={},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
# Early return - don't add default allow rule
|
||||||
|
if not rules:
|
||||||
|
return None
|
||||||
|
if len(rules) == 1:
|
||||||
|
return rules[0]
|
||||||
|
return rules
|
||||||
|
|
||||||
default_allow_actions = {
|
default_allow_actions = {
|
||||||
"view-instance",
|
"view-instance",
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue