完善权限缓存与监控指标
This commit is contained in:
@@ -30,7 +30,7 @@ async def test_get_api_endpoint_permissions_with_custom(db_session: AsyncSession
|
||||
perm = ApiEndpointPermission(
|
||||
study_id=study_id,
|
||||
role="CRA",
|
||||
endpoint_key="POST:/subjects",
|
||||
endpoint_key="subjects:create",
|
||||
allowed=True,
|
||||
)
|
||||
db_session.add(perm)
|
||||
@@ -40,8 +40,8 @@ async def test_get_api_endpoint_permissions_with_custom(db_session: AsyncSession
|
||||
|
||||
assert isinstance(result, dict)
|
||||
assert "CRA" in result
|
||||
assert "POST:/subjects" in result["CRA"]
|
||||
assert result["CRA"]["POST:/subjects"]["allowed"] is True
|
||||
assert "subjects:create" in result["CRA"]
|
||||
assert result["CRA"]["subjects:create"]["allowed"] is True
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -51,9 +51,9 @@ async def test_replace_api_endpoint_permissions_single_role(db_session: AsyncSes
|
||||
|
||||
payload = {
|
||||
"CRA": {
|
||||
"POST:/subjects": True,
|
||||
"GET:/subjects": True,
|
||||
"PATCH:/subjects/{id}": True,
|
||||
"subjects:create": True,
|
||||
"subjects:list": True,
|
||||
"subjects:update": True,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,9 +61,9 @@ async def test_replace_api_endpoint_permissions_single_role(db_session: AsyncSes
|
||||
|
||||
assert isinstance(result, dict)
|
||||
assert "CRA" in result
|
||||
assert result["CRA"]["POST:/subjects"]["allowed"] is True
|
||||
assert result["CRA"]["GET:/subjects"]["allowed"] is True
|
||||
assert result["CRA"]["PATCH:/subjects/{id}"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:create"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:list"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:update"]["allowed"] is True
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -73,21 +73,21 @@ async def test_replace_api_endpoint_permissions_multiple_roles(db_session: Async
|
||||
|
||||
payload = {
|
||||
"CRA": {
|
||||
"POST:/subjects": True,
|
||||
"GET:/subjects": True,
|
||||
"subjects:create": True,
|
||||
"subjects:list": True,
|
||||
},
|
||||
"PV": {
|
||||
"GET:/subjects": True,
|
||||
"GET:/subjects/{id}": True,
|
||||
"subjects:list": True,
|
||||
"subjects:read": True,
|
||||
}
|
||||
}
|
||||
|
||||
result = await replace_api_endpoint_permissions(db_session, study_id, payload)
|
||||
|
||||
assert result["CRA"]["POST:/subjects"]["allowed"] is True
|
||||
assert result["CRA"]["GET:/subjects"]["allowed"] is True
|
||||
assert result["PV"]["GET:/subjects"]["allowed"] is True
|
||||
assert result["PV"]["GET:/subjects/{id}"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:create"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:list"]["allowed"] is True
|
||||
assert result["PV"]["subjects:list"]["allowed"] is True
|
||||
assert result["PV"]["subjects:read"]["allowed"] is True
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -97,13 +97,13 @@ async def test_replace_api_endpoint_permissions_deny(db_session: AsyncSession):
|
||||
|
||||
payload = {
|
||||
"PV": {
|
||||
"POST:/subjects": False,
|
||||
"subjects:create": False,
|
||||
}
|
||||
}
|
||||
|
||||
result = await replace_api_endpoint_permissions(db_session, study_id, payload)
|
||||
|
||||
assert result["PV"]["POST:/subjects"]["allowed"] is False
|
||||
assert result["PV"]["subjects:create"]["allowed"] is False
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -115,7 +115,7 @@ async def test_replace_api_endpoint_permissions_overwrites_existing(db_session:
|
||||
perm = ApiEndpointPermission(
|
||||
study_id=study_id,
|
||||
role="CRA",
|
||||
endpoint_key="POST:/subjects",
|
||||
endpoint_key="subjects:create",
|
||||
allowed=True,
|
||||
)
|
||||
db_session.add(perm)
|
||||
@@ -124,13 +124,13 @@ async def test_replace_api_endpoint_permissions_overwrites_existing(db_session:
|
||||
# 替换权限
|
||||
payload = {
|
||||
"CRA": {
|
||||
"POST:/subjects": False,
|
||||
"subjects:create": False,
|
||||
}
|
||||
}
|
||||
|
||||
result = await replace_api_endpoint_permissions(db_session, study_id, payload)
|
||||
|
||||
assert result["CRA"]["POST:/subjects"]["allowed"] is False
|
||||
assert result["CRA"]["subjects:create"]["allowed"] is False
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -140,23 +140,23 @@ async def test_replace_api_endpoint_permissions_multiple_endpoints(db_session: A
|
||||
|
||||
payload = {
|
||||
"CRA": {
|
||||
"POST:/subjects": True,
|
||||
"GET:/subjects": True,
|
||||
"PATCH:/subjects/{id}": True,
|
||||
"DELETE:/subjects/{id}": False,
|
||||
"POST:/risk-issues": True,
|
||||
"GET:/risk-issues": True,
|
||||
"subjects:create": True,
|
||||
"subjects:list": True,
|
||||
"subjects:update": True,
|
||||
"subjects:delete": False,
|
||||
"risk_issues:create": True,
|
||||
"risk_issues:list": True,
|
||||
}
|
||||
}
|
||||
|
||||
result = await replace_api_endpoint_permissions(db_session, study_id, payload)
|
||||
|
||||
assert result["CRA"]["POST:/subjects"]["allowed"] is True
|
||||
assert result["CRA"]["GET:/subjects"]["allowed"] is True
|
||||
assert result["CRA"]["PATCH:/subjects/{id}"]["allowed"] is True
|
||||
assert result["CRA"]["DELETE:/subjects/{id}"]["allowed"] is False
|
||||
assert result["CRA"]["POST:/risk-issues"]["allowed"] is True
|
||||
assert result["CRA"]["GET:/risk-issues"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:create"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:list"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:update"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:delete"]["allowed"] is False
|
||||
assert result["CRA"]["risk_issues:create"]["allowed"] is True
|
||||
assert result["CRA"]["risk_issues:list"]["allowed"] is True
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -167,13 +167,13 @@ async def test_replace_api_endpoint_permissions_different_studies(db_session: As
|
||||
|
||||
payload_1 = {
|
||||
"CRA": {
|
||||
"POST:/subjects": True,
|
||||
"subjects:create": True,
|
||||
}
|
||||
}
|
||||
|
||||
payload_2 = {
|
||||
"CRA": {
|
||||
"POST:/subjects": False,
|
||||
"subjects:create": False,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -183,8 +183,8 @@ async def test_replace_api_endpoint_permissions_different_studies(db_session: As
|
||||
result_1 = await get_api_endpoint_permissions(db_session, study_id_1)
|
||||
result_2 = await get_api_endpoint_permissions(db_session, study_id_2)
|
||||
|
||||
assert result_1["CRA"]["POST:/subjects"]["allowed"] is True
|
||||
assert result_2["CRA"]["POST:/subjects"]["allowed"] is False
|
||||
assert result_1["CRA"]["subjects:create"]["allowed"] is True
|
||||
assert result_2["CRA"]["subjects:create"]["allowed"] is False
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -209,13 +209,13 @@ async def test_replace_api_endpoint_permissions_partial_update(db_session: Async
|
||||
perm1 = ApiEndpointPermission(
|
||||
study_id=study_id,
|
||||
role="CRA",
|
||||
endpoint_key="POST:/subjects",
|
||||
endpoint_key="subjects:create",
|
||||
allowed=True,
|
||||
)
|
||||
perm2 = ApiEndpointPermission(
|
||||
study_id=study_id,
|
||||
role="CRA",
|
||||
endpoint_key="GET:/subjects",
|
||||
endpoint_key="subjects:list",
|
||||
allowed=True,
|
||||
)
|
||||
db_session.add(perm1)
|
||||
@@ -225,16 +225,16 @@ async def test_replace_api_endpoint_permissions_partial_update(db_session: Async
|
||||
# 只更新一个权限
|
||||
payload = {
|
||||
"CRA": {
|
||||
"POST:/subjects": False,
|
||||
"subjects:create": False,
|
||||
}
|
||||
}
|
||||
|
||||
result = await replace_api_endpoint_permissions(db_session, study_id, payload)
|
||||
|
||||
# POST权限应该被更新
|
||||
assert result["CRA"]["POST:/subjects"]["allowed"] is False
|
||||
assert result["CRA"]["subjects:create"]["allowed"] is False
|
||||
# GET权限应该保持不变
|
||||
assert result["CRA"]["GET:/subjects"]["allowed"] is True
|
||||
assert result["CRA"]["subjects:list"]["allowed"] is True
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
@@ -246,7 +246,7 @@ async def test_get_api_endpoint_permissions_structure(db_session: AsyncSession):
|
||||
perm = ApiEndpointPermission(
|
||||
study_id=study_id,
|
||||
role="CRA",
|
||||
endpoint_key="POST:/subjects",
|
||||
endpoint_key="subjects:create",
|
||||
allowed=True,
|
||||
)
|
||||
db_session.add(perm)
|
||||
|
||||
Reference in New Issue
Block a user