@@ -29,12 +29,13 @@ import formencode
from formencode import htmlfill
from pylons import request, session, tmpl_context as c, url, config
from pylons.controllers.util import abort, redirect
from pylons.i18n.translation import _
from rhodecode.lib.exceptions import UsersGroupsAssignedException
from rhodecode.lib import helpers as h
from rhodecode.lib.auth import LoginRequired, HasPermissionAllDecorator
from rhodecode.lib.base import BaseController, render
from rhodecode.model.db import User, UsersGroup, Permission, UsersGroupToPerm
from rhodecode.model.forms import UserForm, UsersGroupForm
@@ -150,12 +151,14 @@ class UsersGroupsController(BaseControll
# method='delete')
# url('users_group', id=ID)
users_group_model = UsersGroupModel()
try:
users_group_model.delete(id)
h.flash(_('successfully deleted users group'), category='success')
except UsersGroupsAssignedException, e:
h.flash(e, category='error')
except Exception:
h.flash(_('An error occurred during deletion of users group'),
category='error')
return redirect(url('users_groups'))
def show(self, id, format='html'):
@@ -42,6 +42,9 @@ class LdapImportError(Exception):
class DefaultUserException(Exception):
pass
class UserOwnsReposException(Exception):
class UsersGroupsAssignedException(Exception):
@@ -283,12 +283,14 @@ class UsersGroup(Base, BaseModel):
users_group_id = Column("users_group_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
users_group_name = Column("users_group_name", String(length=255, convert_unicode=False, assert_unicode=None), nullable=False, unique=True, default=None)
users_group_active = Column("users_group_active", Boolean(), nullable=True, unique=None, default=None)
members = relationship('UsersGroupMember', cascade="all, delete, delete-orphan", lazy="joined")
def __repr__(self):
return '<userGroup(%s)>' % (self.users_group_name)
@classmethod
def get_by_group_name(cls, group_name, cache=False, case_insensitive=False):
if case_insensitive:
gr = Session.query(cls)\
.filter(cls.users_group_name.ilike(group_name))
@@ -674,12 +676,14 @@ class UsersGroupRepoToPerm(Base, BaseMod
repository_id = Column("repository_id", Integer(), ForeignKey('repositories.repo_id'), nullable=False, unique=None, default=None)
users_group = relationship('UsersGroup')
permission = relationship('Permission')
repository = relationship('Repository')
return '<userGroup:%s => %s >' % (self.users_group, self.repository)
class UsersGroupToPerm(Base, BaseModel):
__tablename__ = 'users_group_to_perm'
users_group_to_perm_id = Column("users_group_to_perm_id", Integer(), nullable=False, unique=True, default=None, primary_key=True)
users_group_id = Column("users_group_id", Integer(), ForeignKey('users_groups.users_group_id'), nullable=False, unique=None, default=None)
permission_id = Column("permission_id", Integer(), ForeignKey('permissions.permission_id'), nullable=False, unique=None, default=None)
@@ -25,15 +25,17 @@
import logging
import traceback
from rhodecode.model import BaseModel
from rhodecode.model.caching_query import FromCache
from rhodecode.model.db import UsersGroup, UsersGroupMember
from rhodecode.model.db import UsersGroup, UsersGroupMember, \
UsersGroupRepoToPerm
log = logging.getLogger(__name__)
class UsersGroupModel(BaseModel):
@@ -81,12 +83,22 @@ class UsersGroupModel(BaseModel):
log.error(traceback.format_exc())
self.sa.rollback()
raise
def delete(self, users_group_id):
# check if this group is not assigned to repo
assigned_groups = UsersGroupRepoToPerm.query()\
.filter(UsersGroupRepoToPerm.users_group_id ==
users_group_id).all()
if assigned_groups:
raise UsersGroupsAssignedException('Group assigned to %s' %
assigned_groups)
users_group = self.get(users_group_id, cache=False)
self.sa.delete(users_group)
self.sa.commit()
except:
Status change: