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插件开发Trac插件开发Trac插件开发Trac插件开发
Trac应用于项目管理,经典阐述,TRAC管理首选教材 0. 前言 - 1 - 0.1. 我们遇到了什么问题? - 1 - 0.2. 什么是TRAC? - 2 - 0.3. TRAC可以做什么? - 3 - ...1.3. 分配权限 - 11 - ....................
Apache+Trac配置Apache+Trac配置Apache+Trac配置
trac工具包 安装文件 和说明文档 安装文件 和说明文档
Trac用户使用介绍Trac用户使用介绍Trac用户使用介绍
trac插件开发指南,用于开发TRAC的插件
trac汉化安装文档和相关需要安装的程序,简单便捷的让你安装trac
很久以来就有的想法,给我们的产品开发...使用过vss,虽说简洁,但功能不完善而且有很多小BUG,所以放弃,在次研究Trac,发现Trac非常符合我的要求:免费、开源、跨平台、轻量级、高度可扩展,下面介绍下svn+trac的配置
Trac-0.12.2及配套 含:Trac Babel Bitten Genshi Python
trac项目管理 windows 系统安装
trac install file22
Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。Trac以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件;Trac应用力求不影响现有...
doc文件,讲述windows之下如何安装和配置trac系统。trac系统是一个增强的wiki知识库,可以做项目开发源码管理,bug跟踪等。
如何从零环境开始安装Trac的教程,关键点都已标注出来
精选安装trac截图详解,均有详图描述,轻松安装trac
Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。Trac以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件;Trac应用力求不影响现有...
SVN+Trac安装笔记
Trac系统使用初体验ppt幻灯,使用ppt2007打开
TRAC教程【原创】 非常贴近使用的教材
最近花了好大力气才将trac系统搭建成功,为了以后的朋友不用再花费这么多时间跟精力,现将其分享。其中包括详细的配置说明和相关的所有软件,还有svn和apache的基本配置说明。