Browse Source

add minimal admin operations: group create,read,update,delete + user read

Damien Accorsi 10 years ago
parent
commit
aa0a5965c8
2 changed files with 130 additions and 2 deletions
  1. 126 0
      pboard/pboard/controllers/admin.py
  2. 4 2
      pboard/pboard/controllers/root.py

+ 126 - 0
pboard/pboard/controllers/admin.py View File

@@ -0,0 +1,126 @@
1
+# -*- coding: utf-8 -*-
2
+"""Main Controller"""
3
+
4
+from tgext.admin.config import AdminConfig, CrudRestControllerConfig
5
+from sprox.formbase import AddRecordForm
6
+from sprox import formbase as sform
7
+from sprox import fillerbase as sfill
8
+from sprox import tablebase as stable
9
+from formencode import Schema
10
+from formencode.validators import FieldsMatch
11
+from tw2.forms import PasswordField, TextField, HiddenField
12
+from tw2 import forms as tw2f
13
+from formencode import validators as fev
14
+
15
+from pboard.model import auth as pma
16
+from pboard import model as pm
17
+
18
+########################################################################################################################
19
+##
20
+## GROUP RELATED STUFF
21
+##
22
+
23
+class GroupRegistrationForm(sform.AddRecordForm):
24
+    __model__ = pma.Group
25
+    __require_fields__     = ['group_name', 'display_name', 'users']
26
+    __omit_fields__        = ['personnal_group', 'created', 'permissions', '_lRights']
27
+    __field_order__        = ['group_name', 'display_name']
28
+
29
+    __headers__ = dict(group_name='Unique name', display_name='Visible name')
30
+
31
+class GroupEditForm(sform.EditableForm):
32
+    __model__ = pma.Group
33
+    __require_fields__     = ['group_name', 'display_name', 'users']
34
+    __omit_fields__        = ['personnal_group', 'created', 'permissions', '_lRights']
35
+    __field_order__        = ['group_name', 'display_name']
36
+
37
+    __headers__ = dict(group_name='Unique name', display_name='Visible name')
38
+
39
+class GroupTableFillerForm(sfill.TableFiller):
40
+
41
+    __model__ = pma.Group
42
+    __limit_fields__ = ['group_id', 'group_name', 'display_name', 'users']
43
+    #__add_fields__ = {'associated_users':None}
44
+
45
+    def _do_get_provider_count_and_objs(self, director=None, **kw):
46
+        groups = pm.DBSession.query(pma.Group).filter(pma.Group.group_id>0).all()
47
+        return len(groups), groups
48
+
49
+    def users(self, obj):
50
+        users = ''.join(['<li>{0}</li>'.format(user.getDisplayName()) for user in obj.users])
51
+        return users.join(('<ul>', '</ul>'))
52
+
53
+class GroupTable(stable.TableBase):
54
+    __model__ = pma.Group
55
+    __limit_fields__ = ['group_id', 'group_name', 'display_name', 'users']
56
+    __headers__ = dict(group_id='id', group_name='Unique name', display_name='Visible name', users='Users')
57
+    __xml_fields__ = ['users']
58
+
59
+class GroupCrudConfig(CrudRestControllerConfig):
60
+    new_form_type = GroupRegistrationForm
61
+    edit_form_type = GroupEditForm
62
+    table_filler_type = GroupTableFillerForm
63
+    table_type = GroupTable
64
+
65
+
66
+########################################################################################################################
67
+##
68
+## USER RELATED STUFF
69
+##
70
+
71
+
72
+form_validator =  Schema(chained_validators=(FieldsMatch('password',
73
+                                                         'verify_password',
74
+                                                         messages={'invalidNoMatch':
75
+                                                         'Passwords do not match'}),))
76
+class UserRegistrationForm(AddRecordForm):
77
+    pass
78
+    __model__ = pma.User
79
+    __require_fields__     = ['display_name', 'email_address', 'password']
80
+    __omit_fields__        = ['_password', 'groups', 'created', 'user_id', '_lAllNodes']
81
+    __field_order__        = ['display_name', 'email_address', 'password', 'verify_password']
82
+
83
+    __fields__ = dict(display_name='Name', email_address='Email', password='Password', verify_password='Retype Password', )
84
+
85
+    email_address          = TextField('blop')
86
+    display_name           = TextField
87
+    verify_password        = PasswordField('verify_password')
88
+    groups = tw2f.MultipleSelectionField('groups')
89
+    """
90
+    __base_validator__     = form_validator
91
+    """
92
+
93
+class UserTableFiller(sfill.TableFiller):
94
+
95
+    __model__ = pma.User
96
+    __limit_fields__ = ['user_id', 'email_address', 'display_name', 'groups']
97
+
98
+    def groups(self, obj):
99
+        groups = ''.join(['<li>{0}</li>'.format(group.getDisplayName()) for group in obj.groups if group.group_id>0])
100
+        return groups.join(('<ul>', '</ul>'))
101
+
102
+class UserTable(stable.TableBase):
103
+    __model__ = pma.User
104
+    __limit_fields__ = ['user_id', 'email_address', 'display_name', 'groups']
105
+    __field_order__ = ['user_id', 'display_name', 'email_address', 'groups']
106
+    __omit_fields__ = ['__actions__']
107
+    __headers__ = dict(user_id='id', email_address='Email', display_name='Name', groups='Groups')
108
+    __xml_fields__ = ['groups']
109
+
110
+
111
+class UserCrudConfig(CrudRestControllerConfig):
112
+    new_form_type = UserRegistrationForm
113
+    table_filler_type = UserTableFiller
114
+    table_type = UserTable
115
+
116
+########################################################################################################################
117
+##
118
+## GENERIC STUFF
119
+##
120
+
121
+class PodAdminConfig(AdminConfig):
122
+    user = UserCrudConfig
123
+    group = GroupCrudConfig
124
+
125
+
126
+

+ 4 - 2
pboard/pboard/controllers/root.py View File

@@ -11,6 +11,8 @@ from pboard.lib.auth import can_read
11 11
 import tgext.admin.tgadminconfig as tgat
12 12
 import tgext.admin.controller as tgac
13 13
 
14
+from pboard.controllers import admin as pcad
15
+
14 16
 from pboard.lib.base import BaseController
15 17
 from pboard.controllers.error import ErrorController
16 18
 
@@ -42,9 +44,9 @@ class RootController(BaseController):
42 44
     """
43 45
 
44 46
     admin = tgac.AdminController(
45
-        pm,
47
+        [pm.Group, pm.User],
46 48
         pm.DBSession,
47
-        config_type = tgat.TGAdminConfig
49
+        config_type = pcad.PodAdminConfig
48 50
     )
49 51
 
50 52
     api   = pca.PODApiController()