Ticket #1583: special_group.patch

File special_group.patch, 6.2 kB (added by cdevienne, 1 year ago)
  • 1.0/turbogears/identity/saprovider.py

    old new  
    2121# these will be set when the Provider is initialised. 
    2222user_class = None 
    2323group_class = None 
     24special_group_class = None 
    2425permission_class = None 
    2526visit_class = None 
    2627 
     
    6465        except AttributeError: 
    6566            # Permissions haven't been computed yet 
    6667            pass 
     68        permissions = [] 
     69        for g in session.query(special_group_class).all(): 
     70            if g.predicate.eval_with_object(self): 
     71                permissions.extend([p.permission_name for p in g.permissions]) 
    6772        if not self.user: 
    68             self._permissions = frozenset(
     73            self._permissions = frozenset(permissions
    6974        else: 
    70             self._permissions = frozenset(
     75            self._permissions = frozenset(permissions +
    7176                    p.permission_name for p in self.user.permissions]) 
    7277        return self._permissions 
    7378    permissions = property(_get_permissions) 
     
    8590        return self._groups 
    8691    groups = property(_get_groups) 
    8792 
     93    def _get_special_groups(self): 
     94        try: 
     95            return self._special_groups 
     96        except AttributeError: 
     97            # Special groups haven't been computed yet 
     98            pass 
     99        special_groups = session.query(special_group_class).all() 
     100        self._special_groups = frozenset([group.group_name for group in special_groups if group.predicate.eval_with_object(self)]) 
     101        return self._special_groups 
     102    special_groups = property(_get_special_groups) 
     103 
    88104    def logout(self): 
    89105        ''' 
    90106        Remove the link between this identity and the visit. 
     
    113129        super(SqlAlchemyIdentityProvider, self).__init__() 
    114130        get=turbogears.config.get 
    115131 
    116         global user_class, group_class, permission_class, visit_class 
     132        global user_class, group_class, special_group_class, permission_class, visit_class 
    117133 
    118134        user_class_path = get("identity.saprovider.model.user", 
    119135                              None) 
     
    121137        group_class_path = get("identity.saprovider.model.group", 
    122138                                None) 
    123139        group_class = load_class(group_class_path) 
     140        special_group_class_path = get("identity.saprovider.model.special_group", 
     141                                        None) 
     142        special_group_class = load_class(special_group_class_path) 
    124143        permission_class_path = get("identity.saprovider.model.permission", 
    125144                                    None) 
    126145        permission_class = load_class(permission_class_path) 
     
    139158        ''' 
    140159        class_mapper(user_class).local_table.create(checkfirst=True) 
    141160        class_mapper(group_class).local_table.create(checkfirst=True) 
     161        class_mapper(special_group_class).local_table.create(checkfirst=True) 
    142162        class_mapper(permission_class).local_table.create(checkfirst=True) 
    143163        class_mapper(visit_class).local_table.create(checkfirst=True) 
    144164 
  • 1.0/turbogears/qstemplates/quickstart/+package+/model.py_tmpl

    old new  
    77#end if 
    88#if $sqlalchemy == 'True' 
    99from sqlalchemy import (Table, Column, String, DateTime, Date, Integer, 
    10         DECIMAL, Unicode, ForeignKey, and_, or_
     10        DECIMAL, Unicode, ForeignKey, and_, or_, PickleType
    1111#if $elixir == 'True' 
    1212from elixir import * 
    1313#end if 
     
    171171    Column('created', DateTime, default=datetime.now) 
    172172) 
    173173 
     174special_groups_table = Table('tg_special_group', metadata, 
     175    Column('special_group_id', Integer, primary_key=True), 
     176    Column('group_name', Unicode(16), unique=True), 
     177    Column('display_name', Unicode(255)), 
     178    Column('created', DateTime, default=datetime.now), 
     179    Column('predicate', PickleType) 
     180) 
     181 
    174182users_table = Table('tg_user', metadata, 
    175183    Column('user_id', Integer, primary_key=True), 
    176184    Column('user_name', Unicode(16), unique=True), 
     
    200208        onupdate="CASCADE", ondelete="CASCADE")) 
    201209) 
    202210 
     211special_group_permission_table = Table('special_group_permission', metadata, 
     212    Column('special_group_id', Integer, ForeignKey('tg_special_group.special_group_id', 
     213        onupdate="CASCADE", ondelete="CASCADE")), 
     214    Column('permission_id', Integer, ForeignKey('permission.permission_id', 
     215        onupdate="CASCADE", ondelete="CASCADE")) 
     216) 
     217 
    203218# 
    204219# identity model 
    205220# 
     
    223238    """ 
    224239    pass 
    225240 
     241class SpecialGroup(object): 
     242    """ 
     243    An ultra-simple special group definition. 
     244    """ 
     245    pass 
     246 
    226247class User(object): 
    227248    """ 
    228249    Reasonably basic User definition. Probably would want additional 
     
    286307        properties=dict(users=relation(User, 
    287308                secondary=user_group_table, backref='groups'))) 
    288309 
     310mapper(SpecialGroup, special_groups_table) 
     311 
    289312mapper(Permission, permissions_table, 
    290313        properties=dict(groups=relation(Group, 
    291                 secondary=group_permission_table, backref='permissions'))) 
     314                secondary=group_permission_table, backref='permissions'), 
     315                        special_groups=relation(SpecialGroup, 
     316                secondary=special_group_permission_table, backref='permissions'))) 
    292317#end if 
    293318#if $identity == "sqlalchemy" and $elixir == "True" 
    294319# 
  • 1.0/turbogears/qstemplates/quickstart/+package+/config/app.cfg_tmpl

    old new  
    139139# name using sqlmeta). 
    140140identity.saprovider.model.user="${package}.model.User" 
    141141identity.saprovider.model.group="${package}.model.Group" 
     142identity.saprovider.model.special_group="${package}.model.SpecialGroup" 
    142143identity.saprovider.model.permission="${package}.model.Permission" 
    143144 
    144145# The password encryption algorithm used when comparing passwords against what's