Browse Source

Fix #139 with hacky workaround

justanr 9 years ago
parent
commit
4b57bf336b
1 changed files with 19 additions and 5 deletions
  1. 19 5
      flaskbb/management/views.py

+ 19 - 5
flaskbb/management/views.py

@@ -124,13 +124,27 @@ def edit_user(user_id):
         flash(_("You are not allowed to edit this user."), "danger")
         return redirect(url_for("management.users"))
 
-    secondary_group_query = Group.query.filter(
-        db.not_(Group.id == user.primary_group_id),
-        db.not_(Group.banned),
-        db.not_(Group.guest == True))
+    member_group = db.and_(*[db.not_(getattr(Group, p)) for p in ['admin',
+                                              'mod',
+                                              'super_mod',
+                                              'banned',
+                                              'guest'
+                                              ]])
+
+    filt = db.or_(Group.id.in_(g.id for g in user.groups),
+                   member_group)
+
+    if any(user.permissions[p] for p in ['super_mod', 'admin']):
+        filt = db.or_(filt, Group.mod)
+
+    if user.permissions['admin']:
+        filt = db.or_(filt, Group.admin, Group.super_mod)
+
+    group_query = Group.query.filter(filt)
 
     form = EditUserForm(user)
-    form.secondary_groups.query = secondary_group_query
+    form.primary_group.query = group_query
+    form.secondary_groups.query = group_query
     if form.validate_on_submit():
         form.populate_obj(user)
         user.primary_group_id = form.primary_group.data.id