mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-18 07:23:00 +00:00
Back off removal of read:servers -> read:users:name
Only remove it when using the !server filter, which doesn't make sense for read:users:name
This commit is contained in:
@@ -95,7 +95,7 @@ scope_definitions = {
|
|||||||
},
|
},
|
||||||
'read:servers': {
|
'read:servers': {
|
||||||
'description': 'Read users’ names and their server models (excluding the server state).',
|
'description': 'Read users’ names and their server models (excluding the server state).',
|
||||||
'subscopes': [],
|
'subscopes': ['read:users:name'],
|
||||||
},
|
},
|
||||||
'delete:servers': {'description': "Stop and delete users' servers."},
|
'delete:servers': {'description': "Stop and delete users' servers."},
|
||||||
'tokens': {
|
'tokens': {
|
||||||
@@ -461,7 +461,12 @@ def _expand_scope(scope):
|
|||||||
# reapply !filter
|
# reapply !filter
|
||||||
if filter_:
|
if filter_:
|
||||||
expanded_scopes = {
|
expanded_scopes = {
|
||||||
f"{scope_name}!{filter_}" for scope_name in expanded_scope_names
|
f"{scope_name}!{filter_}"
|
||||||
|
for scope_name in expanded_scope_names
|
||||||
|
# server scopes have some cross-resource subscopes
|
||||||
|
# where the !server filter doesn't make sense,
|
||||||
|
# e.g. read:servers -> read:users:name
|
||||||
|
if not (filter_.startswith("server") and scope_name.startswith("read:user"))
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
expanded_scopes = expanded_scope_names
|
expanded_scopes = expanded_scope_names
|
||||||
|
@@ -203,7 +203,7 @@ def test_orm_roles_delete_cascade(db):
|
|||||||
'read:users:activity',
|
'read:users:activity',
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(['read:servers'], {'read:servers'}),
|
(['read:servers'], {'read:servers', 'read:users:name'}),
|
||||||
(
|
(
|
||||||
['admin:groups'],
|
['admin:groups'],
|
||||||
{
|
{
|
||||||
@@ -227,6 +227,7 @@ def test_orm_roles_delete_cascade(db):
|
|||||||
'read:roles:groups',
|
'read:roles:groups',
|
||||||
'read:groups:name',
|
'read:groups:name',
|
||||||
'read:servers',
|
'read:servers',
|
||||||
|
'read:users:name',
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
@@ -555,23 +555,28 @@ async def test_server_state_access(
|
|||||||
await api_request(
|
await api_request(
|
||||||
app, 'users', user.name, 'servers', server_name, method='post'
|
app, 'users', user.name, 'servers', server_name, method='post'
|
||||||
)
|
)
|
||||||
service = create_service_with_scopes(
|
service = create_service_with_scopes("read:users:name!user=", *scopes)
|
||||||
f"read:users:name!user={user.name}", *scopes
|
|
||||||
)
|
|
||||||
api_token = service.new_api_token()
|
api_token = service.new_api_token()
|
||||||
headers = {'Authorization': 'token %s' % api_token}
|
headers = {'Authorization': 'token %s' % api_token}
|
||||||
|
|
||||||
|
# can I get the user model?
|
||||||
r = await api_request(app, 'users', user.name, headers=headers)
|
r = await api_request(app, 'users', user.name, headers=headers)
|
||||||
r.raise_for_status()
|
can_read_user_model = num_servers > 1 or 'read:users' in scopes
|
||||||
user_model = r.json()
|
if can_read_user_model:
|
||||||
if num_servers:
|
r.raise_for_status()
|
||||||
assert 'servers' in user_model
|
user_model = r.json()
|
||||||
server_models = user_model['servers']
|
if num_servers > 1:
|
||||||
assert len(server_models) == num_servers
|
assert 'servers' in user_model
|
||||||
for server, server_model in server_models.items():
|
server_models = user_model['servers']
|
||||||
assert keys_in.issubset(server_model)
|
assert len(server_models) == num_servers
|
||||||
assert keys_out.isdisjoint(server_model)
|
for server, server_model in server_models.items():
|
||||||
|
assert keys_in.issubset(server_model)
|
||||||
|
assert keys_out.isdisjoint(server_model)
|
||||||
|
else:
|
||||||
|
assert 'servers' not in user_model
|
||||||
else:
|
else:
|
||||||
assert 'servers' not in user_model
|
assert r.status_code == 404
|
||||||
|
|
||||||
r = await api_request(
|
r = await api_request(
|
||||||
app,
|
app,
|
||||||
'users',
|
'users',
|
||||||
|
Reference in New Issue
Block a user