45
45
tasks ,
46
46
util ,
47
47
)
48
- from promgen .forms import UserPermForm
48
+ from promgen .forms import UserPermissionForm
49
49
from promgen .mixins import PromgenGuardianPermissionMixin
50
50
from promgen .shortcuts import resolve_domain
51
51
@@ -286,6 +286,10 @@ class ServiceDetail(LoginRequiredMixin, DetailView):
286
286
"project_set__notifiers__owner" ,
287
287
)
288
288
289
+ def get_context_data (self , ** kwargs ):
290
+ context = super ().get_context_data (** kwargs )
291
+ context ["permission_form" ] = UserPermissionForm (input_object = self .object )
292
+ return context
289
293
290
294
291
295
class ServiceDelete (PromgenGuardianPermissionMixin , DeleteView ):
@@ -496,6 +500,7 @@ def get_context_data(self, **kwargs):
496
500
context = super ().get_context_data (** kwargs )
497
501
context ["sources" ] = models .Farm .driver_set ()
498
502
context ["url_form" ] = forms .URLForm ()
503
+ context ["permission_form" ] = UserPermissionForm (input_object = self .object )
499
504
return context
500
505
501
506
@@ -510,6 +515,10 @@ class FarmList(LoginRequiredMixin, ListView):
510
515
class FarmDetail (LoginRequiredMixin , DetailView ):
511
516
model = models .Farm
512
517
518
+ def get_context_data (self , ** kwargs ):
519
+ context = super ().get_context_data (** kwargs )
520
+ context ["permission_form" ] = UserPermissionForm (input_object = self .object )
521
+ return context
513
522
514
523
515
524
class FarmUpdate (PromgenGuardianPermissionMixin , UpdateView ):
@@ -1508,3 +1517,56 @@ def get(self, request):
1508
1517
return util .proxy_error (response )
1509
1518
1510
1519
return HttpResponse (response .content , content_type = "application/json" )
1520
+
1521
+
1522
+ class PermissionAssign (PromgenGuardianPermissionMixin , View ):
1523
+ permission_required = ["manage_service" , "manage_project" , "manage_farm" ]
1524
+
1525
+ def post (self , request ):
1526
+ user = User .objects .get_by_natural_key (request .POST ["username" ])
1527
+ permission = request .POST ["permission" ]
1528
+ obj = self .get_object ()
1529
+
1530
+ # User should only have one permission MANAGE or EDIT for an object
1531
+ # So we remove all permissions before assigning new one
1532
+ permissions = get_perms (user , obj )
1533
+ for perm in permissions :
1534
+ remove_perm (perm , user , obj )
1535
+
1536
+ assign_perm (permission , user , obj )
1537
+ messages .success (
1538
+ request ,
1539
+ "Assigned permission: {} for user: {} on: {}" .format (permission , user .username ,
1540
+ obj .name ),
1541
+ )
1542
+ return redirect (request .POST ["next" ])
1543
+
1544
+ def get_object (self ):
1545
+ id = self .request .POST ["id" ]
1546
+ model = self .request .POST ["model" ]
1547
+ models = ContentType .objects .get (app_label = "promgen" , model = model )
1548
+ obj = models .get_object_for_this_type (pk = id )
1549
+ return obj
1550
+
1551
+
1552
+ class PermissionDelete (PromgenGuardianPermissionMixin , View ):
1553
+ permission_required = ["manage_service" , "manage_project" , "manage_farm" ]
1554
+
1555
+ def post (self , request ):
1556
+ user = User .objects .get_by_natural_key (request .POST ["username" ])
1557
+ obj = self .get_object ()
1558
+ permissions = get_perms (user , obj )
1559
+ for perm in permissions :
1560
+ remove_perm (perm , user , obj )
1561
+ messages .success (
1562
+ request ,
1563
+ "Removed all permissions of user: {} on: {}" .format (user .username , obj .name ),
1564
+ )
1565
+ return redirect (request .POST ["next" ])
1566
+
1567
+ def get_object (self ):
1568
+ id = self .request .POST ["id" ]
1569
+ model = self .request .POST ["model" ]
1570
+ models = ContentType .objects .get (app_label = "promgen" , model = model )
1571
+ obj = models .get_object_for_this_type (pk = id )
1572
+ return obj
0 commit comments