Skip to content

Commit 1a0a81c

Browse files
authored
Merge pull request #179 from mekanix/only-admin
Only admin can edit/delete other users
2 parents 4939445 + bb57ebf commit 1a0a81c

File tree

4 files changed

+30
-8
lines changed

4 files changed

+30
-8
lines changed

freenit/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = "0.3.18"
1+
__version__ = "0.3.19"

freenit/api/user/ldap.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,13 @@ async def get(id, _: User = Depends(user_perms)) -> UserSafe:
3737
return user
3838

3939
@staticmethod
40-
async def patch(id, data: UserOptional, _: User = Depends(user_perms)) -> UserSafe:
40+
async def patch(
41+
id, data: UserOptional, cur_user: User = Depends(user_perms)
42+
) -> UserSafe:
43+
if not cur_user.admin:
44+
raise HTTPException(
45+
status_code=403, detail="Only admin users can edit other user's details"
46+
)
4147
user = await User.get_by_uid(id)
4248
update = {
4349
field: getattr(data, field)
@@ -48,7 +54,11 @@ async def patch(id, data: UserOptional, _: User = Depends(user_perms)) -> UserSa
4854
return user
4955

5056
@staticmethod
51-
async def delete(id, _: User = Depends(user_perms)) -> UserSafe:
57+
async def delete(id, cur_user: User = Depends(user_perms)) -> UserSafe:
58+
if not cur_user.admin:
59+
raise HTTPException(
60+
status_code=403, detail="Only admin users can delete other users"
61+
)
5262
try:
5363
user = await User.get_by_uid(id)
5464
await user.destroy()

freenit/api/user/sql.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,13 @@ async def get(id, _: User = Depends(user_perms)) -> UserSafe:
4343
return user
4444

4545
@staticmethod
46-
async def patch(id, data: UserOptional, _: User = Depends(user_perms)) -> UserSafe:
46+
async def patch(
47+
id, data: UserOptional, cur_user: User = Depends(user_perms)
48+
) -> UserSafe:
49+
if not cur_user.admin:
50+
raise HTTPException(
51+
status_code=403, detail="Only admin users can edit other user's details"
52+
)
4753
if data.password:
4854
data.password = encrypt(data.password)
4955
try:
@@ -54,7 +60,11 @@ async def patch(id, data: UserOptional, _: User = Depends(user_perms)) -> UserSa
5460
return user
5561

5662
@staticmethod
57-
async def delete(id, _: User = Depends(user_perms)) -> UserSafe:
63+
async def delete(id, cur_user: User = Depends(user_perms)) -> UserSafe:
64+
if not cur_user.admin:
65+
raise HTTPException(
66+
status_code=403, detail="Only admin users can delete other users"
67+
)
5868
try:
5969
user = await User.objects.get(pk=id)
6070
except ormar.exceptions.NoMatch:
@@ -73,7 +83,9 @@ async def get(user: User = Depends(profile_perms)) -> UserSafe:
7383

7484
@staticmethod
7585
@description("Edit my profile")
76-
async def patch(data: UserOptional, user: User = Depends(profile_perms)) -> UserSafe:
86+
async def patch(
87+
data: UserOptional, user: User = Depends(profile_perms)
88+
) -> UserSafe:
7789
if data.password:
7890
data.password = encrypt(data.password)
7991
await user.patch(data)

tests/test_user.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ async def test_get_user_by_id(self, client):
3939
assert response.status_code == 200
4040

4141
async def test_delete_user(self, client):
42-
admin = factories.User()
42+
admin = factories.User(admin=True)
4343
await admin.save()
4444
client.login(user=admin)
4545
user = factories.User()
@@ -48,7 +48,7 @@ async def test_delete_user(self, client):
4848
assert response.status_code == 200
4949

5050
async def test_edit_user(self, client):
51-
admin = factories.User()
51+
admin = factories.User(admin=True)
5252
await admin.save()
5353
client.login(user=admin)
5454
data = {

0 commit comments

Comments
 (0)