Skip to content

Commit 851a940

Browse files
committed
feat: add AdminRoleAssignmentViewSet for managing admin role assignments
1 parent 7bffc13 commit 851a940

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

openedx_authz/urls.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55
from django.urls import re_path, include
66
from rest_framework.routers import DefaultRouter
7-
from .views import LibraryViewSet
7+
from .views import LibraryViewSet, AdminRoleAssignmentViewSet
88

99
router = DefaultRouter()
1010
router.register(r"libraries", LibraryViewSet, basename="library")
11+
router.register(r"admin-roles", AdminRoleAssignmentViewSet, basename="admin-roles")
1112

1213
urlpatterns = [
1314
re_path(r"^api/", include(router.urls)),

openedx_authz/views.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,3 +104,36 @@ def destroy(self, request, pk=None):
104104
{"detail": f'Library "{library_title}" has been deleted.'},
105105
status=status.HTTP_204_NO_CONTENT,
106106
)
107+
108+
109+
class AdminRoleAssignmentViewSet(viewsets.ViewSet):
110+
"""
111+
ViewSet for managing admin role assignments using Casbin.
112+
"""
113+
114+
def create(self, request):
115+
"""
116+
POST /admin-roles/
117+
Assign admin role to a user.
118+
119+
Example request body:
120+
```json
121+
{
122+
"username": "john_doe"
123+
}
124+
```
125+
"""
126+
username = request.data["username"]
127+
enforcer.add_role_for_user(username, "admin")
128+
enforcer.save_policy()
129+
return Response(f"Admin role assigned to user {username}", status=status.HTTP_201_CREATED)
130+
131+
def destroy(self, request, pk=None):
132+
"""
133+
DELETE /admin-roles/{username}/
134+
Remove admin role from a user.
135+
"""
136+
username = pk
137+
enforcer.delete_role_for_user(username, "admin")
138+
enforcer.save_policy()
139+
return Response(f"Admin role removed from user {username}", status=status.HTTP_204_NO_CONTENT)

0 commit comments

Comments
 (0)