##// END OF EJS Templates
move permission check of write access to repo groups inside a form....
marcink -
r3372:157231a4 beta
parent child Browse files
Show More
@@ -160,19 +160,6 b' class ReposController(BaseRepoController'
160 form_result = RepoForm(repo_groups=c.repo_groups_choices,
160 form_result = RepoForm(repo_groups=c.repo_groups_choices,
161 landing_revs=c.landing_revs_choices)()\
161 landing_revs=c.landing_revs_choices)()\
162 .to_python(dict(request.POST))
162 .to_python(dict(request.POST))
163 #we check ACLs after form, since we want to display nicer errors
164 #if form forbids creation of repos inside a group we don't have
165 #perms for
166 if not HasPermissionAny('hg.admin', 'hg.create.repository')():
167 #you're not super admin nor have global create permissions,
168 #but maybe you have at least write permission to a parent group ?
169 parent_group = request.POST.get('repo_group')
170 _gr = RepoGroup.get(parent_group)
171 gr_name = _gr.group_name if _gr else None
172 if not HasReposGroupPermissionAny('group.admin', 'group.write')(group_name=gr_name):
173 msg = _('no permission to create repository in root location')
174 raise formencode.Invalid('', form_result, None,
175 error_dict={'repo_group': msg})
176
163
177 new_repo = RepoModel().create(form_result,
164 new_repo = RepoModel().create(form_result,
178 self.rhodecode_user.user_id)
165 self.rhodecode_user.user_id)
@@ -20,7 +20,7 b' from rhodecode.model.db import RepoGroup'
20 ChangesetStatus
20 ChangesetStatus
21 from rhodecode.lib.exceptions import LdapImportError
21 from rhodecode.lib.exceptions import LdapImportError
22 from rhodecode.config.routing import ADMIN_PREFIX
22 from rhodecode.config.routing import ADMIN_PREFIX
23 from rhodecode.lib.auth import HasReposGroupPermissionAny
23 from rhodecode.lib.auth import HasReposGroupPermissionAny, HasPermissionAny
24
24
25 # silence warnings and pylint
25 # silence warnings and pylint
26 UnicodeString, OneOf, Int, Number, Regex, Email, Bool, StringBoolean, Set, \
26 UnicodeString, OneOf, Int, Number, Regex, Email, Bool, StringBoolean, Set, \
@@ -472,10 +472,12 b' def CanWriteGroup():'
472 class _validator(formencode.validators.FancyValidator):
472 class _validator(formencode.validators.FancyValidator):
473 messages = {
473 messages = {
474 'permission_denied': _(u"You don't have permissions "
474 'permission_denied': _(u"You don't have permissions "
475 "to create repository in this group")
475 "to create repository in this group"),
476 'permission_denied_root': _(u"no permission to create repository "
477 "in root location")
476 }
478 }
477
479
478 def to_python(self, value, state):
480 def _to_python(self, value, state):
479 #root location
481 #root location
480 if value in [-1, "-1"]:
482 if value in [-1, "-1"]:
481 return None
483 return None
@@ -485,6 +487,7 b' def CanWriteGroup():'
485 gr = RepoGroup.get(value)
487 gr = RepoGroup.get(value)
486 gr_name = gr.group_name if gr else None # None means ROOT location
488 gr_name = gr.group_name if gr else None # None means ROOT location
487 val = HasReposGroupPermissionAny('group.write', 'group.admin')
489 val = HasReposGroupPermissionAny('group.write', 'group.admin')
490 can_create_repos = HasPermissionAny('hg.admin', 'hg.create.repository')
488 forbidden = not val(gr_name, 'can write into group validator')
491 forbidden = not val(gr_name, 'can write into group validator')
489 #parent group need to be existing
492 #parent group need to be existing
490 if gr and forbidden:
493 if gr and forbidden:
@@ -492,6 +495,13 b' def CanWriteGroup():'
492 raise formencode.Invalid(msg, value, state,
495 raise formencode.Invalid(msg, value, state,
493 error_dict=dict(repo_type=msg)
496 error_dict=dict(repo_type=msg)
494 )
497 )
498 ## check if we can write to root location !
499 elif gr is None and can_create_repos() is False:
500 msg = M(self, 'permission_denied_root', state)
501 raise formencode.Invalid(msg, value, state,
502 error_dict=dict(repo_type=msg)
503 )
504
495 return _validator
505 return _validator
496
506
497
507
General Comments 0
You need to be logged in to leave comments. Login now