Mercurial > public > src > rhodecode
diff pylons_app/model/forms.py @ 309:29370bb76fa6
first permissions commit: added permission managment on repository edit. Changed db rmissions, validators.
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 25 Jun 2010 02:09:33 +0200 |
parents | 0e5455fda8fd |
children | d303aacb3349 |
line wrap: on
line diff
--- a/pylons_app/model/forms.py Fri Jun 25 02:06:45 2010 +0200 +++ b/pylons_app/model/forms.py Fri Jun 25 02:09:33 2010 +0200 @@ -55,7 +55,8 @@ class ValidUsername(formencode.validators.FancyValidator): def validate_python(self, value, state): - pass + if value in ['default', 'new_user']: + raise formencode.Invalid(_('Invalid username'), value, state) class ValidPassword(formencode.validators.FancyValidator): @@ -145,6 +146,39 @@ return slug return _ValidRepoName + +class ValidPerms(formencode.validators.FancyValidator): + messages = {'perm_new_user_name':_('This username is not valid')} + + def to_python(self, value, state): + perms_update = [] + perms_new = [] + #build a list of permission to update and new permission to create + for k, v in value.items(): + print k, v + if k.startswith('perm_'): + if k.startswith('perm_new_user'): + new_perm = value.get('perm_new_user', False) + new_user = value.get('perm_new_user_name', False) + if new_user and new_perm: + if (new_user, new_perm) not in perms_new: + perms_new.append((new_user, new_perm)) + else: + perms_update.append((k[5:], v)) + #clear from form list + #del value[k] + value['perms_updates'] = perms_update + value['perms_new'] = perms_new + sa = meta.Session + for k, v in perms_new: + try: + self.user_db = sa.query(User).filter(User.username == k).one() + except Exception: + msg = self.message('perm_new_user_name', + state=State_obj) + raise formencode.Invalid(msg, value, state, error_dict={'perm_new_user_name':msg}) + return value + #=============================================================================== # FORMS #=============================================================================== @@ -192,7 +226,7 @@ def RepoForm(edit=False): class _RepoForm(formencode.Schema): allow_extra_fields = True - filter_extra_fields = True + filter_extra_fields = False repo_name = All(UnicodeString(strip=True, min=1, not_empty=True), ValidRepoName(edit)) description = UnicodeString(strip=True, min=3, not_empty=True) private = StringBoolean(if_missing=False) @@ -200,4 +234,5 @@ if edit: user = All(Int(not_empty=True), ValidRepoUser) + chained_validators = [ValidPerms] return _RepoForm