Edgewall Software

Ticket #5246: authz-external-groups-2.patch

File authz-external-groups-2.patch, 2.5 KB (added by christian.seiler@…, 20 months ago)

Updated version of the patch

  • trac/versioncontrol/svn_authz.py

     
    1818 
    1919import os.path 
    2020 
    21 from trac.config import Option 
     21from trac.config import Option, BoolOption 
    2222from trac.core import * 
    2323from trac.versioncontrol import Authorizer 
     24from trac.perm import PermissionSystem 
    2425 
    2526 
    2627class SvnAuthzOptions(Component): 
     
    3233 
    3334    authz_module_name = Option('trac', 'authz_module_name', '', 
    3435        """The module prefix used in the authz_file.""") 
     36     
     37    authz_use_perm_groups = BoolOption('trac', 'authz_use_perm_groups', 'false', 
     38        """Whether to use groups provided by the permission storage instead 
     39        of the groups defined in the [groups] section of the authz file. 
     40        """) 
    3541 
    3642 
    3743def SubversionAuthorizer(env, repos, authname): 
     
    4450        env.log.error('[trac] authz_file (%s) does not exist.' % authz_file) 
    4551 
    4652    module_name = env.config.get('trac', 'authz_module_name') 
    47     return RealSubversionAuthorizer(repos, authname, module_name, authz_file) 
     53    use_perm_groups = env.config.getbool('trac', 'authz_use_perm_groups') 
     54    perm = PermissionSystem(env) 
     55    return RealSubversionAuthorizer(repos, authname, module_name, use_perm_groups, perm, authz_file) 
    4856 
    4957def parent_iter(path): 
    5058    path = path.strip('/') 
     
    6977    module_name = '' 
    7078    conf_authz = None 
    7179 
    72     def __init__(self, repos, auth_name, module_name, cfg_file, cfg_fp=None): 
     80    def __init__(self, repos, auth_name, module_name, use_perm_groups, perm, cfg_file, cfg_fp=None): 
    7381        self.repos = repos 
    7482        self.auth_name = auth_name 
    7583        self.module_name = module_name 
     
    8189        elif cfg_file: 
    8290            self.conf_authz.read(cfg_file) 
    8391 
    84         self.groups = self._groups() 
     92        self.groups = self._groups(use_perm_groups, perm) 
    8593 
    8694    def has_permission(self, path): 
    8795        if path is None: 
     
    108116 
    109117    # Internal API 
    110118 
    111     def _groups(self): 
     119    def _groups(self, use_perm_groups, perm): 
     120        if use_perm_groups: 
     121            groups = [] 
     122            for provider in perm.store.group_providers: 
     123                for group in provider.get_permission_groups(self.auth_name): 
     124                    if group[0] == '@': 
     125                        group = group[1:] 
     126                    groups.append(group) 
     127            return groups 
     128 
    112129        if not self.conf_authz.has_section('groups'): 
    113130            return [] 
    114131