Python 如何在TRAC simplemultiproject环境中按权限仅显示可用项目

Python 如何在TRAC simplemultiproject环境中按权限仅显示可用项目,python,trac,Python,Trac,使用TRAC v 1.0进行测试 我偶然发现,用户可以看到项目,但他们没有访问权限。我不想让他们只看到这些项目的“无权限”,我只是想完全隐藏它,当用户没有权限查看项目时 这里有一个q'n'd“解决方案”,只需将两行代码移到另一个地方。 如果你们中的一些人需要它,只需按如下所示进行更改 替换: for project_name in sorted(projects.keys()): has_access = True can_show = True

使用TRAC v 1.0进行测试

我偶然发现,用户可以看到项目,但他们没有访问权限。我不想让他们只看到这些项目的“无权限”,我只是想完全隐藏它,当用户没有权限查看项目时

这里有一个q'n'd“解决方案”,只需将两行代码移到另一个地方。 如果你们中的一些人需要它,只需按如下所示进行更改

替换:

    for project_name in sorted(projects.keys()):
        has_access = True
        can_show = True
        if (project_name == "--None Project--"):
            div_project = '<br><div id="project"><fieldset><legend><h2>Unbenanntes Projekt</h2></legend>'
        else:
            project_info = self.__SmpModel.get_project_info(project_name)
            if project_info:
                if hide_closed and project_info[4] > 0: # column 4 of table smp_project tells if project is closed
                    can_show = False
                if self.__SmpModel.is_not_in_restricted_users(req.authname, project_info):
                    has_access = False

            div_project = '<br><div id="project"><fieldset><legend><b>Projekt </b> <em style="font-size: 12pt; color: black;">%s</em></legend>' % project_name
            if can_show and has_access and project_info and show_proj_descr:
                div_project = div_project + '<div class="description" xml:space="preserve">'
                if project_info[2]:
                    div_project = div_project + '%s<br/><br/>' % project_info[2]

                div_project = div_project + '%s</div>' % wiki_to_html(project_info[3], self.env, req)

        div_milestone = ''

        if can_show and len(projects[project_name]) > 0:
            if has_access:
                for milestone in projects[project_name]:
                    mi = '<em>%s</em>' % milestone
                    for i in range(len(div_milestones_array)):
                        if(div_milestones_array[i].find(mi)>0):
                            div_milestone = div_milestone + div_milestones_array[i]
            else:
                div_milestone = '<em style="color: red;">no permission</em>'
            div_project = div_project + to_unicode(div_milestone) + '</fieldset></div>'
            div_projects_milestones = to_unicode(div_projects_milestones + div_project)

    stream_div_projects_milestones = HTML(div_projects_milestones)
    return stream_div_projects_milestones
已排序(projects.keys())中的项目名称的
:
has_access=True
能证明吗
如果(项目名称=“--None项目--”):
div_项目=“
取消项目” 其他: project\u info=self.\u SmpModel.get\u project\u info(项目名称) 如果项目信息: 如果hide_closed和project_info[4]>0:#表smp_project的第4列显示项目是否已关闭 can_show=False 如果self.\u SmpModel.不是受限制的用户(req.authname,project\u info): has_access=False div_project='
项目%s'%project_name 如果可以显示并具有访问权限和项目信息并显示项目描述: div_项目=div_项目+“” 如果项目信息[2]: div_project=div_project+'%s

'%project_info[2] div_project=div_project+'%s'%wiki_to_html(project_info[3],self.env,req) div_里程碑=“” 如果can_show and len(项目[项目名称])大于0: 如果您有权访问: 对于项目中的里程碑[项目名称]: mi=“%s”%s 对于范围内的i(len(div\u数组)): 如果(div\u\u数组[i]。查找(mi)>0): div_里程碑=div_里程碑+div_里程碑数组[i] 其他: div_里程碑='无权限' div_项目=div_项目+到unicode(div_里程碑)+” div_项目里程碑=到unicode(div_项目里程碑+div_项目) stream\u div\u projects\u里程碑=HTML(div\u projects\u里程碑) 返回流\u部门\u项目\u里程碑
与:

已排序(projects.keys())中的项目名称的
:
has_access=True
能证明吗
project\u info=self.\u SmpModel.get\u project\u info(项目名称)
如果self.\u SmpModel.不是受限制的用户(req.authname,project\u info):
has_access=False
如果您有权访问:
如果(项目名称=“--None项目--”):
div_项目=“
取消项目” 其他: 如果项目信息: 如果hide_closed和project_info[4]>0:#表smp_project的第4列显示项目是否已关闭 can_show=False div_project='
项目%s'%project_name 如果可以显示并具有访问权限和项目信息并显示项目描述: div_项目=div_项目+“” 如果项目信息[2]: div_project=div_project+'%s

'%project_info[2] div_project=div_project+'%s'%wiki_to_html(project_info[3],self.env,req) div_里程碑=“” 如果can_show and len(项目[项目名称])大于0: 如果您有权访问: 对于项目中的里程碑[项目名称]: mi=“%s”%s 对于范围内的i(len(div\u数组)): 如果(div\u\u数组[i]。查找(mi)>0): div_里程碑=div_里程碑+div_里程碑数组[i] 其他: div_里程碑='无权限' div_项目=div_项目+到unicode(div_里程碑)+” div_项目里程碑=到unicode(div_项目里程碑+div_项目) stream\u div\u projects\u里程碑=HTML(div\u projects\u里程碑) 返回流\u部门\u项目\u里程碑
在simplemultiproject/roadmap.py中


重新启动apache web服务器,您将只看到您有权访问的项目。

好吧,在使用此“解决方案”一段时间后,我在设置不同过滤器时遇到了一些问题。在再次查看脚本之后,我发现只有两行需要更改

这是我新的更好的解决方案: 用这个代码替换上面的代码

    for project_name in sorted(projects.keys()):
        has_access = True
        can_show = True
        if (project_name == "--None Project--"):
            div_project = '<br><div id="project"><fieldset><legend><h2>Unbenanntes Projekt</h2></legend>'
        else:
            project_info = self.__SmpModel.get_project_info(project_name)
            if project_info:
                if hide_closed and project_info[4] > 0: # column 4 of table smp_project tells if project is closed
                    can_show = False
                if self.__SmpModel.is_not_in_restricted_users(req.authname, project_info):
                    has_access = False

            div_project = '<br><div id="project"><fieldset><legend><b>Projekt </b> <em style="font-size: 12pt; color: black;">%s</em></legend>' % project_name
            if can_show and has_access and project_info and show_proj_descr:
                div_project = div_project + '<div class="description" xml:space="preserve">'
                if project_info[2]:
                    div_project = div_project + '%s<br/><br/>' % project_info[2]

                div_project = div_project + '%s</div>' % wiki_to_html(project_info[3], self.env, req)

        div_milestone = ''

        if has_access:            
            if can_show and len(projects[project_name]) > 0:

                for milestone in projects[project_name]:
                    mi = '<em>%s</em>' % milestone
                    for i in range(len(div_milestones_array)):
                        if(div_milestones_array[i].find(mi)>0):
                            div_milestone = div_milestone + div_milestones_array[i]
            else:
                div_milestone = '<em style="color: red;">no permission</em>'
            div_project = div_project + to_unicode(div_milestone) + '</fieldset></div>'
            div_projects_milestones = to_unicode(div_projects_milestones + div_project)

    stream_div_projects_milestones = HTML(div_projects_milestones)
    return stream_div_projects_milestones
已排序(projects.keys())中的项目名称的
:
has_access=True
能证明吗
如果(项目名称=“--None项目--”):
div_项目=“
取消项目” 其他: project\u info=self.\u SmpModel.get\u project\u info(项目名称) 如果项目信息: 如果hide_closed和project_info[4]>0:#表smp_project的第4列显示项目是否已关闭 can_show=False 如果self.\u SmpModel.不是受限制的用户(req.authname,project\u info): has_access=False div_project='
项目%s'%project_name 如果可以显示并具有访问权限和项目信息并显示项目描述: div_项目=div_项目+“” 如果项目信息[2]: div_project=div_project+'%s

'%project_info[2] div_project=div_project+'%s'%wiki_to_html(project_info[3],self.env,req) div_里程碑=“” 如果您有权访问: 如果can_show and len(项目[项目名称])大于0: 对于项目中的里程碑[项目名称]: mi=“%s”%s 对于范围内的i(len(div\u数组)): 如果(div\u\u数组[i]。查找(mi)>0):
    for project_name in sorted(projects.keys()):
        has_access = True
        can_show = True
        if (project_name == "--None Project--"):
            div_project = '<br><div id="project"><fieldset><legend><h2>Unbenanntes Projekt</h2></legend>'
        else:
            project_info = self.__SmpModel.get_project_info(project_name)
            if project_info:
                if hide_closed and project_info[4] > 0: # column 4 of table smp_project tells if project is closed
                    can_show = False
                if self.__SmpModel.is_not_in_restricted_users(req.authname, project_info):
                    has_access = False

            div_project = '<br><div id="project"><fieldset><legend><b>Projekt </b> <em style="font-size: 12pt; color: black;">%s</em></legend>' % project_name
            if can_show and has_access and project_info and show_proj_descr:
                div_project = div_project + '<div class="description" xml:space="preserve">'
                if project_info[2]:
                    div_project = div_project + '%s<br/><br/>' % project_info[2]

                div_project = div_project + '%s</div>' % wiki_to_html(project_info[3], self.env, req)

        div_milestone = ''

        if has_access:            
            if can_show and len(projects[project_name]) > 0:

                for milestone in projects[project_name]:
                    mi = '<em>%s</em>' % milestone
                    for i in range(len(div_milestones_array)):
                        if(div_milestones_array[i].find(mi)>0):
                            div_milestone = div_milestone + div_milestones_array[i]
            else:
                div_milestone = '<em style="color: red;">no permission</em>'
            div_project = div_project + to_unicode(div_milestone) + '</fieldset></div>'
            div_projects_milestones = to_unicode(div_projects_milestones + div_project)

    stream_div_projects_milestones = HTML(div_projects_milestones)
    return stream_div_projects_milestones
Index: simplemultiprojectplugin/trunk/simplemultiproject/roadmap.py
===================================================================
--- simplemultiprojectplugin/trunk/simplemultiproject/roadmap.py    (revision 13785)
+++ simplemultiprojectplugin/trunk/simplemultiproject/roadmap.py    (working copy)
@@ -157,8 +157,9 @@

             div_milestone = ''

-            if can_show and len(projects[project_name]) > 0:
-                if has_access:
+            if has_access:            
+                if can_show and len(projects[project_name]) > 0:
+
                     for milestone in projects[project_name]:
                         mi = '<em>%s</em>' % milestone
                         for i in range(len(div_milestones_array)):