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所对应的权限。
分享到:
相关推荐
Trac的核心组件包括Wiki和Ticket系统。Wiki在Trac中扮演着文档撰写和信息共享的角色,其语法简洁且类似HTML,但更为用户友好。Trac的Wiki功能允许团队成员轻松创建和编辑项目文档,促进知识共享。Ticket系统则是Trac...
Trac 的架构主要包括三个部分:Trac 使用手册、Trac 体系架构和 Trac 权限体系。Trac 使用手册是 Trac 的使用说明,旨在帮助用户快速上手 Trac。Trac 体系架构是 Trac 的运行体系,包括 Trac 构成体系图和 Trac 的...
TRAC的核心功能包括Wiki和Ticket系统。Wiki是一种简单的文档编写工具,其语法简洁,类似于HTML但更为直观,使得团队成员可以方便地创建和编辑文档。Ticket系统则是问题跟踪的关键,每个Ticket代表一项待完成的任务,...
Trac是一个集成Wiki和问题跟踪管理系统的开源软件,旨在简化软件开发项目的管理,同时尊重并适应现有的开发流程。它由Python编写,运行需要Python环境支持,手册中提及的版本为Python 2.5和Trac 0.11Beta,服务器...
Python是Trac的核心执行环境,确保其正确安装至关重要。 ##### 2. 安装Apache2.2.15 Apache Web服务器作为Trac的前端,负责处理HTTP请求并将它们转发给Trac。安装Apache2.2.15并确保其运行正常,通过本地主机页面...
首先,我们需要了解Trac的核心组件。Trac是一款用Python编写的Web应用,它通过与Subversion的集成,可以展示代码仓库的变更历史,并关联这些变更与bug报告或任务。Apache是世界上最流行的HTTP服务器软件,能够处理...
1. **Subversion(SVN)集成**:Trac的核心特性之一就是与Subversion的无缝集成。SVN是一个流行的版本控制系统,用于管理文件和目录的变更历史。通过Trac,你可以直接在Web界面中查看代码差异、提交历史,甚至进行...
Trac是一款开源且免费的项目管理工具,它集成了版本控制系统、缺陷跟踪系统以及文档管理系统,主要用于软件开发项目的协作和管理。在这个“trac汉化安装程序”压缩包中,包含的是Trac的中文版安装文档和相关组件,...
2. 配置权限规则:`trac.ini`中的`[trac]`部分可定义全局权限,而`[permissions]`部分则用于指定特定用户的权限。 七、使用Trac 1. 版本控制:Trac与您的版本控制系统集成,展示代码提交历史、差异以及文件浏览器。...
Trac是一个开源的项目管理工具,它集成了版本控制系统、问题跟踪系统以及文档管理功能。在Trac中,插件是扩展其功能的关键途径。本指南将深入介绍如何开发Trac插件,以便为Trac环境添加自定义功能。 1. **Trac 1.0 ...
Trac的核心功能通过支持变更集、问题管理和Wiki页面的集成方式展现出来,使得它成为进行软件开发时非常有用的一个工具。本文将详细介绍如何在Windows XP操作系统上配置Apache服务器与Trac,以实现项目的版本控制和...
Trac是一款开源且免费的项目管理工具,专为软件开发团队设计,集成了版本控制系统、问题跟踪系统和项目wiki功能。这款工具旨在提供一个透明的工作环境,帮助团队成员更好地协作,跟踪项目进度,并且便于非技术人员...
Trac的核心理念是提供一个透明的工作环境,让开发者可以清晰地看到项目的进展和历史,同时方便地追踪和解决项目中的问题。 **二、安装与配置** 在开始使用Trac之前,你需要在服务器上安装并配置Trac环境。这通常...
1. 角色和权限:Trac支持用户角色和权限管理,可根据团队成员的角色分配不同的操作权限。 2. 插件扩展:Trac拥有丰富的插件库,可以通过安装插件来扩展其功能,如集成持续集成工具、增强报告功能等。 3. 通知与邮件...
1. Trac-0.12.2.win32.exe:这是Trac的核心程序,用于在Windows系统上搭建Trac服务器。这个版本是0.12.2,适用于32位操作系统。安装过程中会创建Web服务接口,以便用户通过浏览器访问Trac项目。 2. pysqlite-2.5.6....
本安装手册将指导你从零开始在本地环境中搭建 Trac 系统。 首先,确保你已经具备了必要的前置条件。Trac 的运行依赖于 Python 解释器和 Apache Web 服务器。在本例中,我们使用的是 Python 2.5 和 Apache 2.2.15。...
你还可以通过Trac的权限管理功能,设置不同用户的角色和权限,以控制他们对项目的访问。 此外,为了保证安全性和性能,你可能需要调整Apache和Trac的配置,例如设置限额,限制日志大小,或者优化Trac的缓存策略。...
Trac的核心特性包括问题跟踪(ticket)系统、文档管理、源代码浏览器以及时间线功能,使其成为开发团队进行项目管理和协同工作的有效平台。官方网站是http://trac.edgewall.org/。 Trac的灵活性在于其强大的插件...
- **定义与功能**:Trac 是一款开源的应用平台,专为软件开发项目集成了一套完整的 Wiki 和问题跟踪管理系统。它旨在帮助开发团队更高效地协作,并提高软件质量。 - **技术背景**:Trac 基于 Python 开发,依赖于 ...