`
phyeas
  • 浏览: 161484 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

想设计一个Python的持久层框架

阅读更多

框架定义在持久层,除提供ORMapping功能外加点权限控制。ORMapping的代码学习iBatis和ActiveRecord的做法,可使用任意一种,想象中xml应该这样子定义

<sqlmap name="queryTable">
    select c1,c2 from table where c1=:name
</sqlmap>

 调用时类似:

sqlmap.execute("queryTable",name="xxx")

 ActiveRecord的类似:

t=sqlmap.select("table",id="1")
t.c1="xxxx"
t.save()#t.delete()...

 权限配置:

<user-group name="group1" default="deny">
    <allow>
        <sqlmap name="queryTable" when="param.name=='admin' or param.name='manager'" />
        <table name="table" when="param.id=1" />
        <!-- 其他允许访问的对象 -->
    </allow>
    <deny>
        <!-- 其他禁止访问的对象 -->
    </deny>
</user-group>
<user-group name="group2">
    <extends name="group1" />
    <!-- 继承其他组 -->
</user-group>
<user id="xxxx">
    <!-- 与用户组的配置一样 -->
</user>

 可以在sqlmap标签上配置权限,如:

<sqlmap default="deny">
    <allow>
        <group name="group1" /><!-- group1以及继承group1的组拥有权限 -->
        <user id="xxxx" />
    </allow>
    <deny />
....
</sqlmap>

针对用ActiveRecord的还可以对表中数据的权限进行分配。如某个用户可以对某个表的那些行进行更新或删除,或者对某些行的某写列拥有update权限,其他则一律没有,用户组可继承多个用户组等等。。。

用sqlmap的就只能对每条命令进行限制。

 

对映射对象的的任何操作如果没有权限则抛出异常。

 

不知道大家以为如何?

分享到:
评论
8 楼 phyeas 2009-04-25  
还是决定在sqlalchemy上进行扩展
7 楼 phyeas 2009-04-25  
如果当前用户对某个对象没有更新权限,代码
obj.name=""
就会报异常,在没有执行save之前,保证该对象在python里的值与数据库中一致
6 楼 phyeas 2009-04-25  
并不只是对每个sql操作进行权限控制,而是对每个持久化对象进行控制,比如查询出一堆对象,那我就能知道这堆对象里哪些我能改,哪些能查,哪些能删,并且关联其他表的话我还可以知道我能不能关联出这些数据。
5 楼 jjx 2009-04-25  
python什么都是对象,所以说应该不是问题吧

比方说你的sqlmap直接就是sqlalchemy的select,insert之类的

queryTable=select([ table ],table.c.c1==bindparam('name'))


为sqlmap 定义权限

queryTable.allow={'group':'group1','user'='xxx'}

写一个query方法
def query(s):
   if hasattr(s,'allow'):
     #判断执行之类的

4 楼 phyeas 2009-04-25  
不过如果大家知道怎么扩展sqlalchemy,使得可以满足权限控制的需求的话请不吝赐教,先谢过了。总比自己从0开始好
3 楼 phyeas 2009-04-25  
用xml配置是因为xml具有更好的可读性。
2 楼 phyeas 2009-04-25  
我的需求是能在持久层做权限控制。sqlalchemy好像不能满足这个需求吧
1 楼 jjx 2009-04-25  
很好奇为什么sqlalchemy不能满足需求,而且使用了python ,还有必要用xml配置吗?

相关推荐

Global site tag (gtag.js) - Google Analytics