`
lukejin
  • 浏览: 366129 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

trac权限系统核心算法

阅读更多

trac的权限系统设计的非常的巧妙,权限以{username,action}的方式保存在数据库中,真正的"操作权限"必须都是大写字母,比如"WIKI_VIEW"。

 

同时trac提供了一个巧妙的用户组的实现方式,如果一个用户所对应的action值为小写字母,那么这个action其实就是一个user group,用户所拥有的权限即为这个user group所对应的权限。

 

trac的权限控制的核心代码为perm.py 中DefaultPermissionStore的get_user_permissions这个函数

这个函数中包含了权限的扩展实现切入点,还有权限算法的实现。

 

 

def get_user_permissions(self, username):
        subjects = set([username])
        for provider in self.group_providers:
            subjects.update(provider.get_permission_groups(username))

        actions = set([])
        db = self.env.get_db_cnx()
        cursor = db.cursor()
        cursor.execute("SELECT username,action FROM permission")
        rows = cursor.fetchall()
        while True:
            num_users = len(subjects)
            num_actions = len(actions)
            for user, action in rows:
                if user in subjects:
                    if action.isupper() and action not in actions:
                        actions.add(action)
                    if not action.isupper() and action not in subjects:
                        # action is actually the name of the permission group
                        # here
                        subjects.add(action)
            if num_users == len(subjects) and num_actions == len(actions):
                break
        return list(actions)
  
代码解释:

这里有两个集合,subjects和actions

subjects中装的是username和其所对应的groupname等等

actions中存放的是subjects拥有的所有的操作

一开始,将当前username加入subjects集合 

然后便是便利扩展的  组策略, 看当前的用户是否属于某个扩展的组,如果存在则将对应的group name加入subjects中

接着将actions设置为空的集合

下面便是对所有的权限表的记录进行循环,根据subjects中的去找出对应的action,

如果action都是大写字母,且当前actions中没有,则加入actions,

如果action为小写,则说明其为一个group,若subjects没有当前找个group,则将其加入action中,

这样一直循环下去,直到某轮循环下来发现subjects和actions都没有变化,说明处理已经结束。

然后找个时候actions中的所有记录就为当前user所对应的权限。


 

2
0
分享到:
评论

相关推荐

    trac使用手册.doc

    Trac的核心组件包括Wiki和Ticket系统。Wiki在Trac中扮演着文档撰写和信息共享的角色,其语法简洁且类似HTML,但更为用户友好。Trac的Wiki功能允许团队成员轻松创建和编辑项目文档,促进知识共享。Ticket系统则是Trac...

    开源项目管理工具-trac使用手册

    Trac 的架构主要包括三个部分:Trac 使用手册、Trac 体系架构和 Trac 权限体系。Trac 使用手册是 Trac 的使用说明,旨在帮助用户快速上手 Trac。Trac 体系架构是 Trac 的运行体系,包括 Trac 构成体系图和 Trac 的...

    TRAC教程【原创】

    TRAC的核心功能包括Wiki和Ticket系统。Wiki是一种简单的文档编写工具,其语法简洁,类似于HTML但更为直观,使得团队成员可以方便地创建和编辑文档。Ticket系统则是问题跟踪的关键,每个Ticket代表一项待完成的任务,...

    trac项目管理使用手册

    Trac是一个集成Wiki和问题跟踪管理系统的开源软件,旨在简化软件开发项目的管理,同时尊重并适应现有的开发流程。它由Python编写,运行需要Python环境支持,手册中提及的版本为Python 2.5和Trac 0.11Beta,服务器...

    Trac系统安装手册

    Python是Trac的核心执行环境,确保其正确安装至关重要。 ##### 2. 安装Apache2.2.15 Apache Web服务器作为Trac的前端,负责处理HTTP请求并将它们转发给Trac。安装Apache2.2.15并确保其运行正常,通过本地主机页面...

    trac + apache +svn 跟踪系统

    首先,我们需要了解Trac的核心组件。Trac是一款用Python编写的Web应用,它通过与Subversion的集成,可以展示代码仓库的变更历史,并关联这些变更与bug报告或任务。Apache是世界上最流行的HTTP服务器软件,能够处理...

    Trac安装包

    1. **Subversion(SVN)集成**:Trac的核心特性之一就是与Subversion的无缝集成。SVN是一个流行的版本控制系统,用于管理文件和目录的变更历史。通过Trac,你可以直接在Web界面中查看代码差异、提交历史,甚至进行...

    trac汉化安装程序

    Trac是一款开源且免费的项目管理工具,它集成了版本控制系统、缺陷跟踪系统以及文档管理系统,主要用于软件开发项目的协作和管理。在这个“trac汉化安装程序”压缩包中,包含的是Trac的中文版安装文档和相关组件,...

    选安装trac截图详解

    2. 配置权限规则:`trac.ini`中的`[trac]`部分可定义全局权限,而`[permissions]`部分则用于指定特定用户的权限。 七、使用Trac 1. 版本控制:Trac与您的版本控制系统集成,展示代码提交历史、差异以及文件浏览器。...

    trac插件开发指南

    Trac是一个开源的项目管理工具,它集成了版本控制系统、问题跟踪系统以及文档管理功能。在Trac中,插件是扩展其功能的关键途径。本指南将深入介绍如何开发Trac插件,以便为Trac环境添加自定义功能。 1. **Trac 1.0 ...

    Apache+Trac配置

    Trac的核心功能通过支持变更集、问题管理和Wiki页面的集成方式展现出来,使得它成为进行软件开发时非常有用的一个工具。本文将详细介绍如何在Windows XP操作系统上配置Apache服务器与Trac,以实现项目的版本控制和...

    trac中文使用手册

    Trac是一款开源且免费的项目管理工具,专为软件开发团队设计,集成了版本控制系统、问题跟踪系统和项目wiki功能。这款工具旨在提供一个透明的工作环境,帮助团队成员更好地协作,跟踪项目进度,并且便于非技术人员...

    trac使用手册中文版

    Trac的核心理念是提供一个透明的工作环境,让开发者可以清晰地看到项目的进展和历史,同时方便地追踪和解决项目中的问题。 **二、安装与配置** 在开始使用Trac之前,你需要在服务器上安装并配置Trac环境。这通常...

    Trac软件开发流程管理工具

    1. 角色和权限:Trac支持用户角色和权限管理,可根据团队成员的角色分配不同的操作权限。 2. 插件扩展:Trac拥有丰富的插件库,可以通过安装插件来扩展其功能,如集成持续集成工具、增强报告功能等。 3. 通知与邮件...

    trac安装windws系统2

    1. Trac-0.12.2.win32.exe:这是Trac的核心程序,用于在Windows系统上搭建Trac服务器。这个版本是0.12.2,适用于32位操作系统。安装过程中会创建Web服务接口,以便用户通过浏览器访问Trac项目。 2. pysqlite-2.5.6....

    Trac安装手册

    本安装手册将指导你从零开始在本地环境中搭建 Trac 系统。 首先,确保你已经具备了必要的前置条件。Trac 的运行依赖于 Python 解释器和 Apache Web 服务器。在本例中,我们使用的是 Python 2.5 和 Apache 2.2.15。...

    Apache+Trac+SVN

    你还可以通过Trac的权限管理功能,设置不同用户的角色和权限,以控制他们对项目的访问。 此外,为了保证安全性和性能,你可能需要调整Apache和Trac的配置,例如设置限额,限制日志大小,或者优化Trac的缓存策略。...

    trac0.12 整合的文档可用

    Trac的核心特性包括问题跟踪(ticket)系统、文档管理、源代码浏览器以及时间线功能,使其成为开发团队进行项目管理和协同工作的有效平台。官方网站是http://trac.edgewall.org/。 Trac的灵活性在于其强大的插件...

    trac使用手册.pdf

    - **定义与功能**:Trac 是一款开源的应用平台,专为软件开发项目集成了一套完整的 Wiki 和问题跟踪管理系统。它旨在帮助开发团队更高效地协作,并提高软件质量。 - **技术背景**:Trac 基于 Python 开发,依赖于 ...

Global site tag (gtag.js) - Google Analytics