7
7
8
8
from corehq .apps .hqadmin .views .users import send_email_notif
9
9
from corehq .util .signals import signalcommand
10
+ from corehq .toggles import ALL_TAGS
11
+ from corehq .toggles .sql_models import ToggleEditPermission
12
+
10
13
11
14
logger = logging .getLogger (__name__ )
12
15
@@ -30,8 +33,11 @@ def get_password_from_user():
30
33
def handle (self , username , ** options ):
31
34
if not settings .ALLOW_MAKE_SUPERUSER_COMMAND :
32
35
from dimagi .utils .web import get_site_domain
33
- raise CommandError (f"""You cannot run this command in SaaS Enviornments.
34
- Use https://{ get_site_domain ()} /hq/admin/superuser_management/ for granting superuser permissions""" )
36
+ raise CommandError (
37
+ "You cannot run this command in SaaS environments. "
38
+ f"Use https://{ get_site_domain ()} /hq/admin/superuser_management/ "
39
+ "for granting superuser permissions."
40
+ )
35
41
from corehq .apps .users .models import WebUser
36
42
try :
37
43
validate_email (username )
@@ -55,6 +61,8 @@ def handle(self, username, **options):
55
61
couch_user .is_staff = True
56
62
couch_user .can_assign_superuser = True
57
63
64
+ toggle_permission_changes = self .grant_all_tags_edit_permissions (couch_user .username )
65
+
58
66
if is_superuser_changed or is_staff_changed or can_assign_superuser_changed :
59
67
couch_user .save ()
60
68
@@ -81,4 +89,22 @@ def handle(self, username, **options):
81
89
logger .info ("✓ User {} can assign superuser privilege" .format (couch_user .username ))
82
90
fields_changed ['same_management_privilege' ] = couch_user .can_assign_superuser
83
91
92
+ if toggle_permission_changes ['added' ]:
93
+ logger .info ("→ User {} can now edit all feature flags" .format (couch_user .username ))
94
+ fields_changed ['toggle_edit_permissions' ] = toggle_permission_changes
95
+ else :
96
+ logger .info ("✓ User {} can edit all feature flags" .format (couch_user .username ))
97
+
84
98
send_email_notif ([fields_changed ], changed_by_user = 'The make_superuser command' )
99
+
100
+ @staticmethod
101
+ def grant_all_tags_edit_permissions (username ):
102
+ toggle_permission_changes = {'added' : [], 'removed' : []}
103
+ for tag in ALL_TAGS :
104
+ toggle_permission = ToggleEditPermission .objects .get_by_tag_slug (tag .slug )
105
+ if not toggle_permission :
106
+ toggle_permission = ToggleEditPermission (tag_slug = tag .slug )
107
+ if username not in toggle_permission .enabled_users :
108
+ toggle_permission .add_users ([username ])
109
+ toggle_permission_changes ['added' ].append (tag .name )
110
+ return toggle_permission_changes
0 commit comments