`
lukejin
  • 浏览: 362510 次
  • 性别: 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插件开发Trac插件开发

    Trac插件开发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配置Apache+Trac配置

    trac工具包trac工具包

    trac工具包 安装文件 和说明文档 安装文件 和说明文档

    Trac用户使用介绍

    Trac用户使用介绍Trac用户使用介绍Trac用户使用介绍

    trac插件开发指南

    trac插件开发指南,用于开发TRAC的插件

    trac汉化安装程序

    trac汉化安装文档和相关需要安装的程序,简单便捷的让你安装trac

    SVN+Trac配置

    很久以来就有的想法,给我们的产品开发...使用过vss,虽说简洁,但功能不完善而且有很多小BUG,所以放弃,在次研究Trac,发现Trac非常符合我的要求:免费、开源、跨平台、轻量级、高度可扩展,下面介绍下svn+trac的配置

    Trac-0.12.2及配套

    Trac-0.12.2及配套 含:Trac Babel Bitten Genshi Python

    trac-windows

    trac项目管理 windows 系统安装

    trac install file22

    trac install file22

    Trac-1.0.1.zip

    Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。Trac以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件;Trac应用力求不影响现有...

    windows下trac系统t的安装及配置

    doc文件,讲述windows之下如何安装和配置trac系统。trac系统是一个增强的wiki知识库,可以做项目开发源码管理,bug跟踪等。

    Trac系统安装手册

    如何从零环境开始安装Trac的教程,关键点都已标注出来

    选安装trac截图详解

    精选安装trac截图详解,均有详图描述,轻松安装trac

    trac使用手册.doc

    Trac是一个为软件开发项目需要而集成了Wiki和问题跟踪管理系统的应用平台,是一个开源软件应用。Trac以简单的方式建立了一个软件项目管理的Web应用,以帮助开发人员更好地写出高质量的软件;Trac应用力求不影响现有...

    SVN+Trac安装笔记

    SVN+Trac安装笔记

    Trac系统使用初体验ppt幻灯

    Trac系统使用初体验ppt幻灯,使用ppt2007打开

    TRAC教程【原创】

    TRAC教程【原创】 非常贴近使用的教材

    trac + apache +svn 跟踪系统

    最近花了好大力气才将trac系统搭建成功,为了以后的朋友不用再花费这么多时间跟精力,现将其分享。其中包括详细的配置说明和相关的所有软件,还有svn和apache的基本配置说明。

Global site tag (gtag.js) - Google Analytics