1515from ietf .community .models import CommunityList , SearchRule
1616from ietf .community .utils import reset_name_contains_index_for_rule , can_manage_community_list
1717from ietf .doc .models import Document , State
18- from ietf .group .models import Group , RoleHistory , Role
18+ from ietf .group .models import Group , RoleHistory , Role , GroupFeatures
1919from ietf .ietfauth .utils import has_role
2020from ietf .name .models import GroupTypeName
2121from ietf .person .models import Email
@@ -105,6 +105,7 @@ def save_milestone_in_history(milestone):
105105
106106 return h
107107
108+ # TODO: rework this using features.groupman_authroles
108109def can_manage_group_type (user , group , type_id = None ):
109110 if not user .is_authenticated :
110111 return False
@@ -125,8 +126,11 @@ def can_manage_group_type(user, group, type_id=None):
125126 return has_role (user , ('Secretariat' ))
126127
127128def can_manage_group (user , group ):
128- if can_manage_group_type (user , group ):
129- return True
129+ if not user .is_authenticated :
130+ return False
131+ for authrole in group .features .groupman_authroles :
132+ if has_role (user , authrole ):
133+ return True
130134 return group .has_role (user , group .features .groupman_roles )
131135
132136def milestone_reviewer_for_group_type (group_type ):
@@ -141,6 +145,18 @@ def can_manage_materials(user, group):
141145def can_manage_session_materials (user , group , session ):
142146 return has_role (user , 'Secretariat' ) or (group .has_role (user , group .features .matman_roles ) and not session .is_material_submission_cutoff ())
143147
148+ # Maybe this should be cached...
149+ def can_manage_some_groups (user ):
150+ if not user .is_authenticated :
151+ return False
152+ for gf in GroupFeatures .objects .all ():
153+ for authrole in gf .groupman_authroles :
154+ if has_role (user , authrole ):
155+ return True
156+ if Role .objects .filter (name__in = gf .groupman_roles , group__type_id = gf .type_id , person__user = user ).exists ():
157+ return True
158+ return False
159+
144160def can_provide_status_update (user , group ):
145161 if not group .features .acts_like_wg :
146162 return False
0 commit comments