Mercurial > kallithea
comparison rhodecode/controllers/admin/users_groups.py @ 2776:63e58ef80ef1
Merge beta branch into stable
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Sun, 02 Sep 2012 21:19:54 +0200 |
parents | d2d35cf2b351 |
children | 4150c45b5f7f |
comparison
equal
deleted
inserted
replaced
2301:9d097c2592d3 | 2776:63e58ef80ef1 |
---|---|
32 from pylons.controllers.util import abort, redirect | 32 from pylons.controllers.util import abort, redirect |
33 from pylons.i18n.translation import _ | 33 from pylons.i18n.translation import _ |
34 | 34 |
35 from rhodecode.lib import helpers as h | 35 from rhodecode.lib import helpers as h |
36 from rhodecode.lib.exceptions import UsersGroupsAssignedException | 36 from rhodecode.lib.exceptions import UsersGroupsAssignedException |
37 from rhodecode.lib.utils2 import safe_unicode | 37 from rhodecode.lib.utils2 import safe_unicode, str2bool |
38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator | 38 from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator |
39 from rhodecode.lib.base import BaseController, render | 39 from rhodecode.lib.base import BaseController, render |
40 | 40 |
41 from rhodecode.model.users_group import UsersGroupModel | 41 from rhodecode.model.users_group import UsersGroupModel |
42 | 42 |
43 from rhodecode.model.db import User, UsersGroup, Permission, UsersGroupToPerm | 43 from rhodecode.model.db import User, UsersGroup |
44 from rhodecode.model.forms import UsersGroupForm | 44 from rhodecode.model.forms import UsersGroupForm |
45 from rhodecode.model.meta import Session | 45 from rhodecode.model.meta import Session |
46 from rhodecode.lib.utils import action_logger | |
46 | 47 |
47 log = logging.getLogger(__name__) | 48 log = logging.getLogger(__name__) |
48 | 49 |
49 | 50 |
50 class UsersGroupsController(BaseController): | 51 class UsersGroupsController(BaseController): |
62 c.available_permissions = config['available_permissions'] | 63 c.available_permissions = config['available_permissions'] |
63 | 64 |
64 def index(self, format='html'): | 65 def index(self, format='html'): |
65 """GET /users_groups: All items in the collection""" | 66 """GET /users_groups: All items in the collection""" |
66 # url('users_groups') | 67 # url('users_groups') |
67 c.users_groups_list = self.sa.query(UsersGroup).all() | 68 c.users_groups_list = UsersGroup().query().all() |
68 return render('admin/users_groups/users_groups.html') | 69 return render('admin/users_groups/users_groups.html') |
69 | 70 |
70 def create(self): | 71 def create(self): |
71 """POST /users_groups: Create a new item""" | 72 """POST /users_groups: Create a new item""" |
72 # url('users_groups') | 73 # url('users_groups') |
74 users_group_form = UsersGroupForm()() | 75 users_group_form = UsersGroupForm()() |
75 try: | 76 try: |
76 form_result = users_group_form.to_python(dict(request.POST)) | 77 form_result = users_group_form.to_python(dict(request.POST)) |
77 UsersGroupModel().create(name=form_result['users_group_name'], | 78 UsersGroupModel().create(name=form_result['users_group_name'], |
78 active=form_result['users_group_active']) | 79 active=form_result['users_group_active']) |
79 h.flash(_('created users group %s') \ | 80 gr = form_result['users_group_name'] |
80 % form_result['users_group_name'], category='success') | 81 action_logger(self.rhodecode_user, |
81 #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa) | 82 'admin_created_users_group:%s' % gr, |
82 Session.commit() | 83 None, self.ip_addr, self.sa) |
84 h.flash(_('created users group %s') % gr, category='success') | |
85 Session().commit() | |
83 except formencode.Invalid, errors: | 86 except formencode.Invalid, errors: |
84 return htmlfill.render( | 87 return htmlfill.render( |
85 render('admin/users_groups/users_group_add.html'), | 88 render('admin/users_groups/users_group_add.html'), |
86 defaults=errors.value, | 89 defaults=errors.value, |
87 errors=errors.error_dict or {}, | 90 errors=errors.error_dict or {}, |
112 c.group_members_obj = [x.user for x in c.users_group.members] | 115 c.group_members_obj = [x.user for x in c.users_group.members] |
113 c.group_members = [(x.user_id, x.username) for x in | 116 c.group_members = [(x.user_id, x.username) for x in |
114 c.group_members_obj] | 117 c.group_members_obj] |
115 | 118 |
116 c.available_members = [(x.user_id, x.username) for x in | 119 c.available_members = [(x.user_id, x.username) for x in |
117 self.sa.query(User).all()] | 120 User.query().all()] |
118 | 121 |
119 available_members = [safe_unicode(x[0]) for x in c.available_members] | 122 available_members = [safe_unicode(x[0]) for x in c.available_members] |
120 | 123 |
121 users_group_form = UsersGroupForm(edit=True, | 124 users_group_form = UsersGroupForm(edit=True, |
122 old_data=c.users_group.get_dict(), | 125 old_data=c.users_group.get_dict(), |
123 available_members=available_members)() | 126 available_members=available_members)() |
124 | 127 |
125 try: | 128 try: |
126 form_result = users_group_form.to_python(request.POST) | 129 form_result = users_group_form.to_python(request.POST) |
127 UsersGroupModel().update(c.users_group, form_result) | 130 UsersGroupModel().update(c.users_group, form_result) |
128 h.flash(_('updated users group %s') \ | 131 gr = form_result['users_group_name'] |
129 % form_result['users_group_name'], | 132 action_logger(self.rhodecode_user, |
130 category='success') | 133 'admin_updated_users_group:%s' % gr, |
131 #action_logger(self.rhodecode_user, 'new_user', '', '', self.sa) | 134 None, self.ip_addr, self.sa) |
132 Session.commit() | 135 h.flash(_('updated users group %s') % gr, category='success') |
136 Session().commit() | |
133 except formencode.Invalid, errors: | 137 except formencode.Invalid, errors: |
138 ug_model = UsersGroupModel() | |
139 defaults = errors.value | |
134 e = errors.error_dict or {} | 140 e = errors.error_dict or {} |
135 | 141 defaults.update({ |
136 perm = Permission.get_by_key('hg.create.repository') | 142 'create_repo_perm': ug_model.has_perm(id, |
137 e.update({'create_repo_perm': | 143 'hg.create.repository'), |
138 UsersGroupModel().has_perm(id, perm)}) | 144 'fork_repo_perm': ug_model.has_perm(id, |
145 'hg.fork.repository'), | |
146 '_method': 'put' | |
147 }) | |
139 | 148 |
140 return htmlfill.render( | 149 return htmlfill.render( |
141 render('admin/users_groups/users_group_edit.html'), | 150 render('admin/users_groups/users_group_edit.html'), |
142 defaults=errors.value, | 151 defaults=defaults, |
143 errors=e, | 152 errors=e, |
144 prefix_error=False, | 153 prefix_error=False, |
145 encoding="UTF-8") | 154 encoding="UTF-8") |
146 except Exception: | 155 except Exception: |
147 log.error(traceback.format_exc()) | 156 log.error(traceback.format_exc()) |
148 h.flash(_('error occurred during update of users group %s') \ | 157 h.flash(_('error occurred during update of users group %s') \ |
149 % request.POST.get('users_group_name'), category='error') | 158 % request.POST.get('users_group_name'), category='error') |
150 | 159 |
151 return redirect(url('users_groups')) | 160 return redirect(url('edit_users_group', id=id)) |
152 | 161 |
153 def delete(self, id): | 162 def delete(self, id): |
154 """DELETE /users_groups/id: Delete an existing item""" | 163 """DELETE /users_groups/id: Delete an existing item""" |
155 # Forms posted to this method should contain a hidden field: | 164 # Forms posted to this method should contain a hidden field: |
156 # <input type="hidden" name="_method" value="DELETE" /> | 165 # <input type="hidden" name="_method" value="DELETE" /> |
157 # Or using helpers: | 166 # Or using helpers: |
158 # h.form(url('users_group', id=ID), | 167 # h.form(url('users_group', id=ID), |
159 # method='delete') | 168 # method='delete') |
160 # url('users_group', id=ID) | 169 # url('users_group', id=ID) |
161 | 170 usr_gr = UsersGroup.get_or_404(id) |
162 try: | 171 try: |
163 UsersGroupModel().delete(id) | 172 UsersGroupModel().delete(usr_gr) |
164 Session.commit() | 173 Session().commit() |
165 h.flash(_('successfully deleted users group'), category='success') | 174 h.flash(_('successfully deleted users group'), category='success') |
166 except UsersGroupsAssignedException, e: | 175 except UsersGroupsAssignedException, e: |
167 h.flash(e, category='error') | 176 h.flash(e, category='error') |
168 except Exception: | 177 except Exception: |
169 log.error(traceback.format_exc()) | 178 log.error(traceback.format_exc()) |
177 | 186 |
178 def edit(self, id, format='html'): | 187 def edit(self, id, format='html'): |
179 """GET /users_groups/id/edit: Form to edit an existing item""" | 188 """GET /users_groups/id/edit: Form to edit an existing item""" |
180 # url('edit_users_group', id=ID) | 189 # url('edit_users_group', id=ID) |
181 | 190 |
182 c.users_group = self.sa.query(UsersGroup).get(id) | 191 c.users_group = UsersGroup.get_or_404(id) |
183 if not c.users_group: | |
184 return redirect(url('users_groups')) | |
185 | 192 |
186 c.users_group.permissions = {} | 193 c.users_group.permissions = {} |
187 c.group_members_obj = [x.user for x in c.users_group.members] | 194 c.group_members_obj = [x.user for x in c.users_group.members] |
188 c.group_members = [(x.user_id, x.username) for x in | 195 c.group_members = [(x.user_id, x.username) for x in |
189 c.group_members_obj] | 196 c.group_members_obj] |
190 c.available_members = [(x.user_id, x.username) for x in | 197 c.available_members = [(x.user_id, x.username) for x in |
191 self.sa.query(User).all()] | 198 User.query().all()] |
199 ug_model = UsersGroupModel() | |
192 defaults = c.users_group.get_dict() | 200 defaults = c.users_group.get_dict() |
193 perm = Permission.get_by_key('hg.create.repository') | 201 defaults.update({ |
194 defaults.update({'create_repo_perm': | 202 'create_repo_perm': ug_model.has_perm(c.users_group, |
195 UsersGroupModel().has_perm(c.users_group, perm)}) | 203 'hg.create.repository'), |
204 'fork_repo_perm': ug_model.has_perm(c.users_group, | |
205 'hg.fork.repository'), | |
206 }) | |
207 | |
196 return htmlfill.render( | 208 return htmlfill.render( |
197 render('admin/users_groups/users_group_edit.html'), | 209 render('admin/users_groups/users_group_edit.html'), |
198 defaults=defaults, | 210 defaults=defaults, |
199 encoding="UTF-8", | 211 encoding="UTF-8", |
200 force_defaults=False | 212 force_defaults=False |
202 | 214 |
203 def update_perm(self, id): | 215 def update_perm(self, id): |
204 """PUT /users_perm/id: Update an existing item""" | 216 """PUT /users_perm/id: Update an existing item""" |
205 # url('users_group_perm', id=ID, method='put') | 217 # url('users_group_perm', id=ID, method='put') |
206 | 218 |
207 grant_perm = request.POST.get('create_repo_perm', False) | 219 users_group = UsersGroup.get_or_404(id) |
208 | 220 grant_create_perm = str2bool(request.POST.get('create_repo_perm')) |
209 if grant_perm: | 221 grant_fork_perm = str2bool(request.POST.get('fork_repo_perm')) |
210 perm = Permission.get_by_key('hg.create.none') | 222 inherit_perms = str2bool(request.POST.get('inherit_default_permissions')) |
211 UsersGroupModel().revoke_perm(id, perm) | 223 |
212 | 224 usersgroup_model = UsersGroupModel() |
213 perm = Permission.get_by_key('hg.create.repository') | 225 |
214 UsersGroupModel().grant_perm(id, perm) | 226 try: |
215 h.flash(_("Granted 'repository create' permission to user"), | 227 users_group.inherit_default_permissions = inherit_perms |
216 category='success') | 228 Session().add(users_group) |
217 | 229 |
218 Session.commit() | 230 if grant_create_perm: |
219 else: | 231 usersgroup_model.revoke_perm(id, 'hg.create.none') |
220 perm = Permission.get_by_key('hg.create.repository') | 232 usersgroup_model.grant_perm(id, 'hg.create.repository') |
221 UsersGroupModel().revoke_perm(id, perm) | 233 h.flash(_("Granted 'repository create' permission to users group"), |
222 | 234 category='success') |
223 perm = Permission.get_by_key('hg.create.none') | 235 else: |
224 UsersGroupModel().grant_perm(id, perm) | 236 usersgroup_model.revoke_perm(id, 'hg.create.repository') |
225 h.flash(_("Revoked 'repository create' permission to user"), | 237 usersgroup_model.grant_perm(id, 'hg.create.none') |
226 category='success') | 238 h.flash(_("Revoked 'repository create' permission to users group"), |
227 Session.commit() | 239 category='success') |
240 | |
241 if grant_fork_perm: | |
242 usersgroup_model.revoke_perm(id, 'hg.fork.none') | |
243 usersgroup_model.grant_perm(id, 'hg.fork.repository') | |
244 h.flash(_("Granted 'repository fork' permission to users group"), | |
245 category='success') | |
246 else: | |
247 usersgroup_model.revoke_perm(id, 'hg.fork.repository') | |
248 usersgroup_model.grant_perm(id, 'hg.fork.none') | |
249 h.flash(_("Revoked 'repository fork' permission to users group"), | |
250 category='success') | |
251 | |
252 Session().commit() | |
253 except Exception: | |
254 log.error(traceback.format_exc()) | |
255 h.flash(_('An error occurred during permissions saving'), | |
256 category='error') | |
257 | |
228 return redirect(url('edit_users_group', id=id)) | 258 return redirect(url('edit_users_group', id=id)) |