Browse Source

groups: move default group data to a suitable place

trophies
Lephe 4 months ago
parent
commit
725e768520
4 changed files with 90 additions and 41 deletions
  1. 72
    0
      app/data/groups.yaml
  2. 1
    1
      app/models/privs.py
  3. 15
    39
      app/routes/admin.py
  4. 2
    1
      assets/privs.txt

+ 72
- 0
app/data/groups.yaml View File

@@ -0,0 +1,72 @@
1
+-
2
+ name:  Administrateur
3
+ css:   "color: #ee0000"
4
+ descr: "Vous voyez Chuck Norris ? Pareil."
5
+ privs: access-admin-board access-assoc-board write-news
6
+        upload-shared-files delete-shared-files
7
+        edit-posts delete-posts scheduled-posting
8
+        delete-content move-public-content move-private-content showcase-content
9
+        edit-static-content extract-posts
10
+        delete-notes delete-tests
11
+        shoutbox-kick shoutbox-ban
12
+        unlimited-pms footer-statistics community-login
13
+        access-admin-panel edit-account delete-account
14
+-
15
+ name:  Modérateur
16
+ css:   "color: green"
17
+ descr: "Maîtres du kick, ils sont là pour faire respecter un semblant d'ordre."
18
+ privs: access-admin-board
19
+        edit-posts delete-posts
20
+        move-public-content extract-posts
21
+        delete-notes delete-tests
22
+        shoutbox-kick shoutbox-ban
23
+        unlimited-pms
24
+-
25
+ name:  Développeur
26
+ css:   "color: #4169e1"
27
+ descr: "Les développeurs maintiennent et améliorent le code du site."
28
+ privs: access-admin-board
29
+        upload-shared-files delete-shared-files
30
+        scheduled-posting
31
+        edit-static-content
32
+        unlimited-pms footer-statistics community-login
33
+        access-admin-panel
34
+-
35
+ name:  Rédacteur
36
+ css:   "color: blue"
37
+ descr: "Rédigent les meilleurs articles de la page d'accueil, rien que pour
38
+         vous <3"
39
+ privs: access-admin-board write-news
40
+        upload-shared-files delete-shared-files
41
+        scheduled-posting
42
+        showcase-content edit-static-content
43
+-
44
+ name:  Responsable communauté
45
+ css:   "color: DarkOrange"
46
+ descr: "Anime les pages Twitter et Facebook de Planète Casio et surveille
47
+         l'évolution du monde autour de nous !"
48
+ privs: access-admin-board write-news
49
+        upload-shared-files delete-shared-files
50
+        scheduled-posting
51
+        showcase-content
52
+-
53
+ name:  Partenaire
54
+ css:   "color: purple"
55
+ descr: "Membres de l'équipe d'administration des sites partenaires."
56
+ privs: write-news
57
+        upload-shared-files delete-shared-files
58
+        scheduled-posting
59
+-
60
+ name:  Compte communautaire
61
+ css:   "background:#d8d8d8; border-radius:4px; color:#303030; padding:1px 2px"
62
+ descr: "Compte à usage général de l'équipe de Planète Casio."
63
+-
64
+ name:  Robot
65
+ css:   "color: #cf25d0"
66
+ descr: "♫ Je suis Nono, le petit robot, l'ami d'Ulysse ♫"
67
+ privs: shoutbox-post shoutbox-kick shoutbox-ban
68
+-
69
+ name:  Membre de CreativeCalc
70
+ css:   "color: #222222"
71
+ descr: "CreativeCalc est l'association qui gère Planète Casio."
72
+ privs: access-assoc-board

+ 1
- 1
app/models/privs.py View File

@@ -65,7 +65,7 @@ class Group(db.Model):
65 65
 
66 66
     def privs(self):
67 67
         gps = GroupPrivilege.query.filter_by(gid=self.id).all()
68
-        return [ gp.priv for gp in gps ]
68
+        return sorted(gp.priv for gp in gps)
69 69
 
70 70
     def __repr__(self):
71 71
         return f'<Group "{self.name}">'

+ 15
- 39
app/routes/admin.py View File

@@ -8,47 +8,20 @@ from app.models.privs import SpecialPrivilege
8 8
 from app.forms.account import AdminUpdateAccountForm, AdminDeleteAccountForm
9 9
 from app.utils.render import render
10 10
 from app import app, db
11
+import yaml
12
+import os
11 13
 
12 14
 @app.route('/admin', methods=['GET', 'POST'])
13 15
 @priv_required('access-admin-panel')
14 16
 def adm():
15 17
     return render('admin/index.html')
16 18
 
17
-# Default groups and privileges.
18
-default_groups = [
19
-    ('Administrateur', 'color: #ee0000',
20
-     "Vous voyez Chuck Norris ? Pareil."),
21
-    ('Modérateur', 'color: green',
22
-     "Maîtres du kick, ils sont là pour faire respecter un semblant " +
23
-     "d'ordre."),
24
-    ('Développeur', 'color: #4169e1',
25
-     "Les développeurs maintiennent et améliorent le code du site."),
26
-    ('Rédacteur', 'color: blue',
27
-     "Rédigent les meilleurs articles de la page d'accueil, rien " +
28
-     "que pour vous <3"),
29
-    ('Responsable communauté', 'color: DarkOrange',
30
-     "Anime les pages Twitter et Facebook de Planète Casio et " +
31
-     "surveille l'évolution du monde autour de nous !"),
32
-    ('Partenaire', 'color: purple',
33
-     "Membres de l'équipe d'administration des sites partenaires."),
34
-    ('Compte communautaire', 'background: #d8d8d8; border-radius: ' +
35
-     '4px; color:#303030; padding: 1px 2px',
36
-     "Compte à usage général de l'équipe de Planète Casio."),
37
-
38
-    ('Robot', 'color: #cf25d0',
39
-     "♫ Je suis Nono, le petit robot, l'ami d'Ulysse ♫",
40
-     "shoutbox-kick shoutbox-ban".split()),
41
-
42
-    ('Membre de CreativeCalc', 'color: #222222',
43
-     "CreativeCalc est l'association qui gère Planète Casio.",
44
-     "access-assoc-board".split()),
45
-]
46
-
47 19
 @app.route('/admin/groups', methods=['GET', 'POST'])
48 20
 @priv_required('access-admin-panel')
49 21
 def adm_groups():
50 22
     class GroupRegenerationForm(FlaskForm):
51
-        submit = SubmitField('Régénérer les groupes, privilèges, et comptes communs')
23
+        submit = SubmitField(
24
+            'Régénérer les groupes, privilèges, et comptes communs')
52 25
 
53 26
     form = GroupRegenerationForm()
54 27
     if form.validate_on_submit():
@@ -57,16 +30,18 @@ def adm_groups():
57 30
             g.delete()
58 31
 
59 32
         # Create base groups
60
-        groups = [ Group(g[0], g[1], g[2]) for g in default_groups ]
33
+        groups = []
34
+        with open(os.path.join(app.root_path, "data", "groups.yaml")) as fp:
35
+            groups = yaml.load(fp.read())
36
+
61 37
         for g in groups:
62
-            db.session.add(g)
38
+            g["obj"] = Group(g["name"], g["css"], g["descr"])
39
+            db.session.add(g["obj"])
63 40
         db.session.commit()
64 41
 
65
-        for g, dg in zip(groups, default_groups):
66
-            if len(dg) < 4:
67
-                continue
68
-            for priv in dg[3]:
69
-                db.session.add(GroupPrivilege(g, priv))
42
+        for g in groups:
43
+            for priv in g.get("privs", "").split():
44
+                db.session.add(GroupPrivilege(g["obj"], priv))
70 45
         db.session.commit()
71 46
 
72 47
         # Clean up test members
@@ -98,7 +73,8 @@ def adm_groups():
98 73
 
99 74
     users  = Member.query.all()
100 75
     groups = Group.query.all()
101
-    return render('admin/groups_privileges.html', users=users, groups=groups, form=form)
76
+    return render('admin/groups_privileges.html', users=users, groups=groups,
77
+        form=form)
102 78
 
103 79
 @app.route('/admin/edit-account/<user_id>', methods=['GET', 'POST'])
104 80
 @priv_required('edit-account')

+ 2
- 1
assets/privs.txt View File

@@ -20,6 +20,7 @@ Content (topic, progs, tutos, etc) management:
20 20
   move-private-content     Change the section of a page in a private section
21 21
   showcase-content         Manage stocky content (post-its)
22 22
   edit-static-content      Edit static content pages
23
+  extract-posts            Move out-of-topic posts to a new places
23 24
 
24 25
 Program evaluation:
25 26
   delete-notes             Delete program notes
@@ -37,5 +38,5 @@ Miscellaenous:
37 38
 
38 39
 Administration panel:
39 40
   access-admin-panel       Administration panel of website
40
-  edt-account              Edit details of any account
41
+  edit-account             Edit details of any account
41 42
   delete-account           Remove member accounts

Loading…
Cancel
Save