Changeset 62

Show
Ignore:
Timestamp:
2009年02月24日 10时03分17秒 (3 years ago)
Author:
jiangx
Message:

Fixed #12: Repository admin can manage plugins for the repositories.

Note:

  • Authorization of repository management is in before method in controller/repos.py.
  • Also do some refector, rename attributes name for better understanding.
Location:
trunk/pysvnmanager/controllers
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/pysvnmanager/controllers/authz.py

    r50 r62  
    3333        # Used as checked in user to rcs file. 
    3434        self.authz.login_as = self.login_as 
    35         self.reposlist = set(self.authz.get_manageable_repos_list(self.login_as)) 
     35        self.own_reposlist = set(self.authz.get_manageable_repos_list(self.login_as)) 
    3636         
    3737        # self.reposlist_new is what in ReposRoot directory. 
    38         self.reposlist_real = set(_repos.Repos(cfg.repos_root).repos_list) 
    39         self.reposlist_real.add('/') 
    40          
    41         self.reposlist_set = self.reposlist & self.reposlist_real 
    42         self.reposlist_unexist = self.reposlist - self.reposlist_real 
    43          
    44         if self.authz.is_super_user(self.login_as): 
    45             self.reposlist_unset = self.reposlist_real - self.reposlist 
     38        self.all_reposlist = set(_repos.Repos(cfg.repos_root).repos_list) 
     39        self.all_reposlist.add('/') 
     40         
     41        self.reposlist_set = self.own_reposlist & self.all_reposlist 
     42        self.reposlist_unexist = self.own_reposlist - self.all_reposlist 
     43         
     44        self.is_super_user = self.authz.is_super_user(self.login_as) 
     45        if self.is_super_user: 
     46            self.reposlist_unset = self.all_reposlist - self.own_reposlist 
    4647        else: 
    4748            self.reposlist_unset = set() 
     
    4950    def __before__(self, action): 
    5051        super(AuthzController, self).__before__(action) 
    51         if not self.reposlist: 
     52        if not self.own_reposlist and not self.is_super_user: 
    5253            return redirect_to(h.url_for(controller='security', action='failed')) 
    5354 
     
    5556        c.revision = self.authz.version 
    5657        # used for functional test. 
    57         c.reposlist = self.reposlist 
     58        c.reposlist = self.own_reposlist 
    5859         
    5960        all_avail_users = [] 
  • trunk/pysvnmanager/controllers/repos.py

    r50 r62  
    3434        # Used as checked in user to rcs file. 
    3535        self.authz.login_as = self.login_as 
    36          
    37         self.repos_root = cfg.repos_root 
    38         self.repos = _repos.Repos(self.repos_root) 
    39         self.repos_list = self.repos.repos_list 
    40  
     36 
     37        self.own_reposlist = set(self.authz.get_manageable_repos_list(self.login_as)) 
     38 
     39        # self.all_reposlist is all available repositories in the ReposRoot directory. 
     40        self.repos = _repos.Repos(cfg.repos_root) 
     41        self.all_reposlist = set(self.repos.repos_list) 
     42 
     43        self.reposlist_set = self.own_reposlist & self.all_reposlist 
     44        self.reposlist_unexist = self.own_reposlist - self.all_reposlist 
     45 
     46        self.is_super_user = self.authz.is_super_user(self.login_as) 
     47        if self.is_super_user: 
     48            self.reposlist_unset = self.all_reposlist - self.own_reposlist 
     49        else: 
     50            self.reposlist_unset = set() 
    4151 
    4252    def __before__(self, action): 
    4353        super(ReposController, self).__before__(action) 
    44         if not self.authz.is_super_user(self.login_as): 
     54        if not self.own_reposlist and not self.is_super_user: 
    4555            return redirect_to(h.url_for(controller='security', action='failed')) 
    4656         
    4757    def index(self): 
    4858        return render('/repos/hooks.mako') 
     59 
     60    def validate_repos(self, reposname): 
     61        if reposname not in self.own_reposlist and not self.is_super_user: 
     62            raise Exception("Access denied.") 
    4963 
    5064    def init_repos_list(self): 
     
    5771        msg += 'name[0]="%s";\n' % _("Please choose...") 
    5872        total += 1; 
    59         for reposname in self.repos_list: 
     73        for reposname in sorted(self.reposlist_set): 
    6074            if filter=='blank' and not self.repos.is_blank_svn_repos(reposname): 
    6175                continue 
     
    6377            msg += 'name[%d]="%s";\n' % (total, reposname) 
    6478            total += 1; 
     79        for reposname in sorted(self.reposlist_unset): 
     80            if filter=='blank' and not self.repos.is_blank_svn_repos(reposname): 
     81                continue 
     82            msg += 'id[%d]="%s";' % (total, reposname) 
     83            msg += 'name[%d]="%s";\n' % (total, reposname+' (!)') 
     84            total += 1; 
    6585        msg += 'total=%d;\n' % total 
    6686        return msg 
     
    6888    def get_plugin_list(self): 
    6989        reposname = request.params.get('select') 
    70         h = _hooks.Hooks(self.repos_root + '/' + reposname) 
     90        self.validate_repos(reposname) 
     91        h = _hooks.Hooks(cfg.repos_root + '/' + reposname) 
    7192        total = 0; 
    7293        msg = '' 
     
    86107    def get_installed_hook_form(self): 
    87108        reposname = request.params.get('select') 
    88         h = _hooks.Hooks(self.repos_root + '/' + reposname) 
     109        self.validate_repos(reposname) 
     110        h = _hooks.Hooks(cfg.repos_root + '/' + reposname) 
    89111        msg = '' 
    90112        if len(h.applied_plugins) > 0: 
     
    117139    def get_hook_setting_form(self): 
    118140        reposname  = request.params.get('repos') 
     141        self.validate_repos(reposname) 
    119142        pluginname = request.params.get('plugin') 
    120         h = _hooks.Hooks(self.repos_root + '/' + reposname) 
     143        h = _hooks.Hooks(cfg.repos_root + '/' + reposname) 
    121144        result  = "<input type='hidden' name='_repos' value='%s'>" % reposname 
    122145        result += "<input type='hidden' name='_plugin' value='%s'>" % pluginname 
     
    129152            d = request.params 
    130153            reposname = d.get("_repos") 
     154            self.validate_repos(reposname) 
    131155            pluginname = d.get("_plugin") 
    132             h = _hooks.Hooks(self.repos_root + '/' + reposname) 
     156            h = _hooks.Hooks(cfg.repos_root + '/' + reposname) 
    133157            plugin = h.plugins[pluginname] 
    134158            plugin.install(d) 
     
    145169        d = request.params 
    146170        reposname = d.get("_repos") 
     171        self.validate_repos(reposname) 
    147172        for i in d.keys(): 
    148173            if "pluginid_" in i: 
     
    152177            log.debug("plugin_list:" + ','.join(plugin_list)) 
    153178            try: 
    154                 hookobj = _hooks.Hooks(self.repos_root + '/' + reposname) 
     179                hookobj = _hooks.Hooks(cfg.repos_root + '/' + reposname) 
    155180                for pluginname in plugin_list: 
    156181                    hookobj.plugins[pluginname].reload() 
     
    171196            d = request.params 
    172197            reposname = d.get("reposname") 
     198            self.validate_repos(reposname) 
    173199            self.repos.create(reposname) 
    174200        except Exception, e: 
     
    187213            d = request.params 
    188214            reposname = d.get("repos_list") 
     215            self.validate_repos(reposname) 
    189216            self.repos.delete(reposname) 
    190217        except Exception, e: