Skip to content

Commit c88990e

Browse files
max-zillabingzhanglmarini
authored
add generic superadmin flag to endpoints (#1038)
* add generic superadmin flag * complete the logic * add force_admin flag to endpoints * fix codegen error * merge, rename to enable_admin * fix codegen * fix codegen * Added enable_admin to FeedAuthorization. --------- Co-authored-by: Bing Zhang <[email protected]> Co-authored-by: Luigi Marini <[email protected]>
1 parent d8cf75d commit c88990e

21 files changed

+1296
-23634
lines changed

backend/app/deps/authorization_deps.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ async def check_public_access(
4444
async def get_role(
4545
dataset_id: str,
4646
current_user=Depends(get_current_username),
47+
enable_admin: bool = False,
4748
admin_mode: bool = Depends(get_admin_mode),
4849
admin=Depends(get_admin),
4950
) -> RoleType:
@@ -70,6 +71,7 @@ async def get_role(
7071
async def get_role_by_file(
7172
file_id: str,
7273
current_user=Depends(get_current_username),
74+
enable_admin: bool = False,
7375
admin_mode: bool = Depends(get_admin_mode),
7476
admin=Depends(get_admin),
7577
) -> RoleType:
@@ -107,6 +109,7 @@ async def get_role_by_file(
107109
async def get_role_by_metadata(
108110
metadata_id: str,
109111
current_user=Depends(get_current_username),
112+
enable_admin: bool = False,
110113
admin_mode: bool = Depends(get_admin_mode),
111114
admin=Depends(get_admin),
112115
) -> RoleType:
@@ -145,6 +148,7 @@ async def get_role_by_metadata(
145148
async def get_role_by_group(
146149
group_id: str,
147150
current_user=Depends(get_current_username),
151+
enable_admin: bool = False,
148152
admin_mode: bool = Depends(get_admin_mode),
149153
admin=Depends(get_admin),
150154
) -> RoleType:
@@ -209,6 +213,7 @@ async def __call__(
209213
self,
210214
dataset_id: str,
211215
current_user: str = Depends(get_current_username),
216+
enable_admin: bool = False,
212217
admin_mode: bool = Depends(get_admin_mode),
213218
admin: bool = Depends(get_admin),
214219
readonly: bool = Depends(get_read_only_user),
@@ -270,6 +275,7 @@ async def __call__(
270275
self,
271276
file_id: str,
272277
current_user: str = Depends(get_current_username),
278+
enable_admin: bool = False,
273279
admin_mode: bool = Depends(get_admin_mode),
274280
admin: bool = Depends(get_admin),
275281
):
@@ -316,6 +322,7 @@ async def __call__(
316322
self,
317323
metadata_id: str,
318324
current_user: str = Depends(get_current_username),
325+
enable_admin: bool = False,
319326
admin_mode: bool = Depends(get_admin_mode),
320327
admin: bool = Depends(get_admin),
321328
):
@@ -385,6 +392,7 @@ async def __call__(
385392
self,
386393
group_id: str,
387394
current_user: str = Depends(get_current_username),
395+
enable_admin: bool = False,
388396
admin_mode: bool = Depends(get_admin_mode),
389397
admin: bool = Depends(get_admin),
390398
):
@@ -422,6 +430,7 @@ async def __call__(
422430
self,
423431
listener_id: str,
424432
current_user: str = Depends(get_current_username),
433+
enable_admin: bool = False,
425434
admin_mode: bool = Depends(get_admin_mode),
426435
admin: bool = Depends(get_admin),
427436
):
@@ -457,6 +466,7 @@ async def __call__(
457466
self,
458467
feed_id: str,
459468
current_user: str = Depends(get_current_username),
469+
enable_admin: bool = False,
460470
admin_mode: bool = Depends(get_admin_mode),
461471
admin: bool = Depends(get_admin),
462472
):
@@ -531,6 +541,7 @@ async def __call__(
531541
def access(
532542
user_role: RoleType,
533543
role_required: RoleType,
544+
enable_admin: bool = False,
534545
admin_mode: bool = Depends(get_admin_mode),
535546
admin: bool = Depends(get_admin),
536547
read_only_user: bool = Depends(get_read_only_user),

backend/app/routers/authentication.py

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
import json
22

3-
from app.keycloak_auth import (
4-
create_user,
5-
enable_disable_user,
6-
get_current_user,
7-
keycloak_openid,
8-
)
9-
from app.models.datasets import DatasetDBViewList
10-
from app.models.users import UserDB, UserIn, UserLogin, UserOut
113
from beanie import PydanticObjectId
124
from fastapi import APIRouter, Depends, HTTPException
135
from keycloak.exceptions import (
@@ -17,6 +9,15 @@
179
)
1810
from passlib.hash import bcrypt
1911

12+
from app.keycloak_auth import (
13+
create_user,
14+
enable_disable_user,
15+
get_current_user,
16+
keycloak_openid,
17+
)
18+
from app.models.datasets import DatasetDBViewList
19+
from app.models.users import UserDB, UserIn, UserLogin, UserOut
20+
2021
router = APIRouter()
2122

2223

@@ -120,13 +121,20 @@ async def get_admin(
120121

121122

122123
@router.get("/users/me/admin_mode")
123-
async def get_admin_mode(current_username=Depends(get_current_user)) -> bool:
124+
async def get_admin_mode(
125+
enable_admin: bool = False, current_username=Depends(get_current_user)
126+
) -> bool:
124127
"""Get Admin mode from User Object."""
125128
if (
126129
current_user := await UserDB.find_one(UserDB.email == current_username.email)
127130
) is not None:
128-
if current_user.admin_mode is not None:
129-
return current_user.admin_mode
131+
if current_user.admin:
132+
if enable_admin:
133+
return True
134+
elif current_user.admin_mode is not None:
135+
return current_user.admin_mode
136+
else:
137+
return False
130138
else:
131139
return False
132140
else:

backend/app/routers/authorization.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ async def save_authorization(
7171
async def get_dataset_role(
7272
dataset_id: str,
7373
current_user=Depends(get_current_username),
74+
enable_admin: bool = False,
7475
admin_mode: bool = Depends(get_admin_mode),
7576
admin=Depends(get_admin),
7677
):

backend/app/routers/datasets.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ async def get_datasets(
224224
limit: int = 10,
225225
mine: bool = False,
226226
admin=Depends(get_admin),
227+
enable_admin: bool = False,
227228
admin_mode: bool = Depends(get_admin_mode),
228229
):
229230
query = [DatasetDBViewList.frozen == False] # noqa: E712
@@ -308,6 +309,7 @@ async def get_dataset_files(
308309
skip: int = 0,
309310
limit: int = 10,
310311
admin=Depends(get_admin),
312+
enable_admin: bool = False,
311313
admin_mode: bool = Depends(get_admin_mode),
312314
allow: bool = Depends(Authorization("viewer")),
313315
):
@@ -753,6 +755,7 @@ async def get_dataset_folders_and_files(
753755
skip: int = 0,
754756
limit: int = 10,
755757
admin=Depends(get_admin),
758+
enable_admin: bool = False,
756759
admin_mode: bool = Depends(get_admin_mode),
757760
allow: bool = Depends(Authorization("viewer")),
758761
):

backend/app/routers/elasticsearch.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ async def search(
5252
query: str,
5353
username=Depends(get_current_username),
5454
admin=Depends(get_admin),
55+
enable_admin: bool = False,
5556
admin_mode: bool = Depends(get_admin_mode),
5657
):
5758
es = await connect_elasticsearch()
@@ -64,6 +65,7 @@ async def msearch(
6465
request: Request,
6566
username=Depends(get_current_username),
6667
admin=Depends(get_admin),
68+
enable_admin: bool = False,
6769
admin_mode: bool = Depends(get_admin_mode),
6870
):
6971
es = await connect_elasticsearch()

backend/app/routers/feeds.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ async def associate_listener(
186186
listener: FeedListener,
187187
user=Depends(get_current_user),
188188
admin=Depends(get_admin),
189+
enable_admin: bool = False,
189190
admin_mode=Depends(get_admin_mode),
190191
allow: bool = Depends(FeedAuthorization()),
191192
):

backend/app/routers/groups.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
from datetime import datetime
22
from typing import Optional
33

4+
from beanie import PydanticObjectId
5+
from beanie.operators import Or, Push, RegEx
6+
from bson.objectid import ObjectId
7+
from fastapi import APIRouter, Depends, HTTPException
48
from app import dependencies
59
from app.deps.authorization_deps import AuthorizationDB, GroupAuthorization
610
from app.keycloak_auth import get_current_user, get_user
@@ -10,6 +14,7 @@
1014
from app.models.pages import Paged, _construct_page_metadata, _get_page_query
1115
from app.models.users import UserDB, UserOut
1216
from app.routers.authentication import get_admin, get_admin_mode
17+
1318
from app.search.index import index_dataset, index_dataset_files
1419
from beanie import PydanticObjectId
1520
from beanie.operators import Or, Push, RegEx
@@ -37,6 +42,7 @@ async def get_groups(
3742
user_id=Depends(get_user),
3843
skip: int = 0,
3944
limit: int = 10,
45+
enable_admin: bool = False,
4046
admin_mode: bool = Depends(get_admin_mode),
4147
admin=Depends(get_admin),
4248
):
@@ -82,6 +88,7 @@ async def search_group(
8288
user_id=Depends(get_user),
8389
skip: int = 0,
8490
limit: int = 10,
91+
enable_admin: bool = False,
8592
admin_mode: bool = Depends(get_admin_mode),
8693
admin=Depends(get_admin),
8794
):

backend/app/routers/licenses.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ async def edit_license(
6565
license_info: LicenseBase,
6666
user_id=Depends(get_user),
6767
admin=Depends(get_admin),
68+
enable_admin: bool = False,
6869
admin_mode: bool = Depends(get_admin_mode),
6970
):
7071
if (license := await LicenseDB.get(PydanticObjectId(license_id))) is not None:
@@ -105,6 +106,7 @@ async def delete_license(
105106
license_id: str,
106107
user_id=Depends(get_user),
107108
admin=Depends(get_admin),
109+
enable_admin: bool = False,
108110
admin_mode: bool = Depends(get_admin_mode),
109111
):
110112
if (license := await LicenseDB.get(PydanticObjectId(license_id))) is not None:

backend/app/routers/listeners.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ async def search_listeners(
201201
user=Depends(get_current_username),
202202
process: Optional[str] = None,
203203
admin=Depends(get_admin),
204+
enable_admin: bool = False,
204205
admin_mode=Depends(get_admin_mode),
205206
):
206207
"""Search all Event Listeners in the db based on text.
@@ -306,6 +307,7 @@ async def get_listeners(
306307
process: Optional[str] = None,
307308
all: Optional[bool] = False,
308309
admin=Depends(get_admin),
310+
enable_admin: bool = False,
309311
admin_mode=Depends(get_admin_mode),
310312
):
311313
"""Get a list of all Event Listeners in the db.

0 commit comments

Comments
 (0)