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

问题描述 投票:1回答:2

用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

有:

    for project_name in sorted(projects.keys()):
        has_access = True
        can_show = True
        project_info = self.__SmpModel.get_project_info(project_name)
        if self.__SmpModel.is_not_in_restricted_users(req.authname, project_info):
            has_access = False

        if has_access:
            if (project_name == "--None Project--"):
                div_project = '<br><div id="project"><fieldset><legend><h2>Unbenanntes Projekt</h2></legend>'
            else:
                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                    

                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

在simplemultiproject / roadmap.py中

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

python trac
2个回答
1
投票

好吧,经过一段时间搞乱这个“解决方案”,我在设置不同的过滤器时遇到了一些问题。在再次查看脚本之后,我看到只需要更改两行。

这是我新的更好的解决方案:只需用上面的代码替换上面的代码即可。

    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)):

0
投票

与此同时,这个问题已经完全过时和过时,因为代码多年来已完全改变。请关闭您的问题或接受此答案。

© www.soinside.com 2019 - 2024. All rights reserved.