diff options
Diffstat (limited to 'rhodecode/model/validators.py')
-rw-r--r-- | rhodecode/model/validators.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/rhodecode/model/validators.py b/rhodecode/model/validators.py index f37f9e2c..89215c08 100644 --- a/rhodecode/model/validators.py +++ b/rhodecode/model/validators.py @@ -19,6 +19,7 @@ from rhodecode.model.db import RepoGroup, Repository, UsersGroup, User,\ ChangesetStatus from rhodecode.lib.exceptions import LdapImportError from rhodecode.config.routing import ADMIN_PREFIX +from rhodecode.lib.auth import HasReposGroupPermissionAny # silence warnings and pylint UnicodeString, OneOf, Int, Number, Regex, Email, Bool, StringBoolean, Set, \ @@ -466,6 +467,25 @@ def ValidForkType(old_data={}): return _validator +def CanWriteGroup(): + class _validator(formencode.validators.FancyValidator): + messages = { + 'permission_denied': _(u"You don't have permissions " + "to create repository in this group") + } + + def validate_python(self, value, state): + gr = RepoGroup.get(value) + if not HasReposGroupPermissionAny( + 'group.write', 'group.admin' + )(gr.group_name, 'get group of repo form'): + msg = M(self, 'permission_denied', state) + raise formencode.Invalid(msg, value, state, + error_dict=dict(repo_type=msg) + ) + return _validator + + def ValidPerms(type_='repo'): if type_ == 'group': EMPTY_PERM = 'group.none' |