Changeset - 63c697d1a631
[Not reviewed]
default
0 6 0
Marcin Kuzminski - 15 years ago 2010-08-21 18:31:28
marcin@python-works.com
added logic for changin defualt permissions, and option to overwrite all defualt permissions on each repository
fixed registration form text
6 files changed with 54 insertions and 9 deletions:
0 comments (0 inline, 0 general)
pylons_app/controllers/admin/permissions.py
Show inline comments
 
@@ -88,24 +88,25 @@ class PermissionsController(BaseControll
 
        #    h.form(url('permission', id=ID),
 
        #           method='put')
 
        # url('permission', id=ID)
 
                
 
        permission_model = PermissionModel()
 
        
 
        _form = DefaultPermissionsForm([x[0] for x in self.perms_choices],
 
                                       [x[0] for x in self.register_choices],
 
                                       [x[0] for x in self.create_choices])()
 
        
 
        try:
 
            form_result = _form.to_python(dict(request.POST))
 
            form_result.update({'perm_user_name':id})
 
            permission_model.update(form_result)
 
            h.flash(_('Default permissions updated succesfully'),
 
                    category='success')
 
                           
 
        except formencode.Invalid as errors:
 
            c.perms_choices = self.perms_choices
 
            c.register_choices = self.register_choices
 
            c.create_choices = self.create_choices
 
                    
 
            return htmlfill.render(
 
                render('admin/permissions/permissions.html'),
 
                defaults=errors.value,
pylons_app/controllers/login.py
Show inline comments
 
@@ -58,26 +58,27 @@ class LoginController(BaseController):
 
                    defaults=errors.value,
 
                    errors=errors.error_dict or {},
 
                    prefix_error=False,
 
                    encoding="UTF-8")
 
                        
 
        return render('/login.html')
 
    
 
    @HasPermissionAnyDecorator('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')
 
    def register(self):
 
        user_model = UserModel()
 
        c.auto_active = False
 
        for perm in user_model.get_default().user_perms:
 
            print perm.permission.permission_name
 
            if perm.permission.permission_name == 'hg.register.auto_activate':
 
                c.auto_active = False
 
                c.auto_active = True
 
                break
 
                        
 
        if request.POST:
 
                
 
            register_form = RegisterForm()()
 
            try:
 
                form_result = register_form.to_python(dict(request.POST))
 
                form_result['active'] = c.auto_active
 
                user_model.create_registration(form_result)
 
                return redirect(url('login_home'))
 
                               
 
            except formencode.Invalid as errors:
pylons_app/lib/auth.py
Show inline comments
 
@@ -115,24 +115,26 @@ def fill_data(user):
 
    """
 
    sa = meta.Session
 
    dbuser = sa.query(User).get(user.user_id)
 
    if dbuser:
 
        user.username = dbuser.username
 
        user.is_admin = dbuser.admin
 
        user.name = dbuser.name
 
        user.lastname = dbuser.lastname
 
        user.email = dbuser.email
 
    else:
 
        user.is_authenticated = False
 
    meta.Session.remove()
 
    from pprint import pprint
 
    pprint(user.permissions)
 
    return user
 
            
 
def fill_perms(user):
 
    """
 
    Fills user permission attribute with permissions taken from database
 
    @param user:
 
    """
 
    
 
    sa = meta.Session
 
    user.permissions['repositories'] = {}
 
    user.permissions['global'] = set()
 
    
 
@@ -155,28 +157,25 @@ def fill_perms(user):
 
        for perm in default_perms:
 
            p = 'repository.admin'
 
            user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
 
    
 
    else:
 
        #=======================================================================
 
        # set default permissions
 
        #=======================================================================
 
        
 
        #default global
 
        for perm in default_perms:
 
            user.permissions['global'].add(perm.UserToPerm.permission.permission_name)
 
            
 
#        user.permissions['global'].add('hg.create.repository')
 
#        user.permissions['global'].add('hg.register')
 
        
 
                    
 
        #default repositories
 
        for perm in default_perms:
 
            if perm.Repository.private and not perm.Repository.user_id == user.user_id:
 
                #disable defaults for private repos,
 
                p = 'repository.none'
 
            elif perm.Repository.user_id == user.user_id:
 
                #set admin if owner
 
                p = 'repository.admin'
 
            else:
 
                p = perm.Permission.permission_name
 
                
 
            user.permissions['repositories'][perm.RepoToPerm.repository.repo_name] = p
pylons_app/model/forms.py
Show inline comments
 
@@ -323,17 +323,18 @@ def ApplicationUiSettingsForm():
 
        filter_extra_fields = False
 
        web_push_ssl = OneOf(['true', 'false'], if_missing='false')
 
        paths_root_path = All(ValidPath(), UnicodeString(strip=True, min=3, not_empty=True))
 
        hooks_changegroup_update = OneOf(['True', 'False'], if_missing=False)
 
        hooks_changegroup_repo_size = OneOf(['True', 'False'], if_missing=False)
 
        
 
    return _ApplicationUiSettingsForm
 

	
 
def DefaultPermissionsForm(perms_choices, register_choices, create_choices):
 
    class _DefaultPermissionsForm(formencode.Schema):
 
        allow_extra_fields = True
 
        filter_extra_fields = True
 
        overwrite_default = OneOf(['true', 'false'], if_missing='false')
 
        default_perm = OneOf(perms_choices)
 
        default_register = OneOf(register_choices)
 
        default_create = OneOf(create_choices)
 
        
 
    return _DefaultPermissionsForm
pylons_app/model/permission_model.py
Show inline comments
 
@@ -15,37 +15,74 @@
 
# 
 
# You should have received a copy of the GNU General Public License
 
# along with this program; if not, write to the Free Software
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 
# MA  02110-1301, USA.
 
"""
 
Created on Aug 20, 2010
 
Model for permissions
 
@author: marcink
 
"""
 

	
 
from pylons.i18n.translation import _
 
from pylons_app.model.db import User, Permission
 
from pylons_app.model.db import User, Permission, UserToPerm, RepoToPerm
 
from pylons_app.model.meta import Session
 
import logging
 
import traceback
 
log = logging.getLogger(__name__)
 

	
 

	
 
class PermissionModel(object):
 

	
 
    def __init__(self):
 
        self.sa = Session() 
 
    
 
    def get_default(self):
 
        return self.sa.query(User).filter(User.username == 'default').scalar()
 
    
 
    def get_permission(self, id):
 
        return self.sa.query(Permission).get(id)
 
    
 
    def get_permission_by_name(self, name):
 
        return self.sa.query(Permission)\
 
        .filter(Permission.permission_name == name).scalar()
 
    
 
    
 
    def update(self, form_result):
 
        print form_result
 
        pass
 
        perm_user = self.sa.query(User)\
 
                .filter(User.username == form_result['perm_user_name']).scalar()
 
        u2p = self.sa.query(UserToPerm).filter(UserToPerm.user == perm_user).all()
 
        if len(u2p) != 3:
 
            raise Exception('There is more than 3 defined \
 
            permissions for defualt user. This should not happen please verify\
 
            your database')
 
        
 
        try:
 
            #stage 1 change defaults    
 
            for p in u2p:
 
                if p.permission.permission_name.startswith('repository.'):
 
                    p.permission = self.get_permission_by_name(form_result['default_perm'])
 
                    self.sa.add(p)
 
                    
 
                if p.permission.permission_name.startswith('hg.register.'):
 
                    p.permission = self.get_permission_by_name(form_result['default_register'])
 
                    self.sa.add(p)
 
                    
 
                if p.permission.permission_name.startswith('hg.create.'):
 
                    p.permission = self.get_permission_by_name(form_result['default_create'])
 
                    self.sa.add(p)
 
            #stage 2 update all default permissions for repos if checked
 
            if form_result['overwrite_default'] == 'true':
 
                for r2p in self.sa.query(RepoToPerm).filter(RepoToPerm.user == perm_user).all():
 
                    r2p.permission = self.get_permission_by_name(form_result['default_perm'])
 
                    self.sa.add(r2p)
 
            
 
            self.sa.commit()
 
        except:
 
            log.error(traceback.format_exc())
 
            self.sa.rollback()
 
            raise               
 
        
 
        
 
        
 
        
 
        
pylons_app/templates/admin/permissions/permissions.html
Show inline comments
 
@@ -24,25 +24,31 @@
 
    <h3>${_('Default permissions')}</h3>
 
    ${h.form(url('permission', id='default'),method='put')}
 
    <div class="form">
 
        <!-- fields -->
 
        <div class="fields">
 
        
 
			<div class="field">
 
				<div class="label">
 
					<label for="default_perm">${_('Default repository permission')}:</label>
 
				</div>
 
				<div class="select">
 
					${h.select('default_perm','',c.perms_choices)}
 
				</div>
 
				
 
		                ${h.checkbox('overwrite_default','true')}
 
		                <label for="overwrite_default">
 
		                <span class="tooltip" 
 
		                tooltip_title="${h.tooltip(_('All default permissions on each repository will be reset to choosen permission, note that all custom default permission on repositories will be lost'))}">
 
		                ${_('overwrite existing settings')}</span> </label>
 
				</div>		                
 
			</div>   
 
			<div class="field">
 
		        <div class="label">
 
		            <label for="default_register">${_('Registration')}:</label>
 
		        </div>
 
				<div class="select">
 
					${h.select('default_register','',c.register_choices)}
 
				</div>
 
			</div> 		
 
             <div class="field">
 
                <div class="label">
 
                    <label for="default_create">${_('Allow repository creation')}:</label>
0 comments (0 inline, 0 general)