aboutsummaryrefslogtreecommitdiff
path: root/rhodecode/model/validators.py
diff options
context:
space:
mode:
Diffstat (limited to 'rhodecode/model/validators.py')
-rw-r--r--rhodecode/model/validators.py20
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'