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))