浏览 2544 次
锁定老帖子 主题:想设计一个Python的持久层框架
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-24
框架定义在持久层,除提供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的就只能对每条命令进行限制。
对映射对象的的任何操作如果没有权限则抛出异常。
不知道大家以为如何? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-25
很好奇为什么sqlalchemy不能满足需求,而且使用了python ,还有必要用xml配置吗?
|
|
返回顶楼 | |
发表时间:2009-04-25
我的需求是能在持久层做权限控制。sqlalchemy好像不能满足这个需求吧
|
|
返回顶楼 | |
发表时间:2009-04-25
用xml配置是因为xml具有更好的可读性。
|
|
返回顶楼 | |
发表时间:2009-04-25
不过如果大家知道怎么扩展sqlalchemy,使得可以满足权限控制的需求的话请不吝赐教,先谢过了。总比自己从0开始好
|
|
返回顶楼 | |
发表时间:2009-04-25
最后修改: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'): #判断执行之类的 |
|
返回顶楼 | |
发表时间:2009-04-25
并不只是对每个sql操作进行权限控制,而是对每个持久化对象进行控制,比如查询出一堆对象,那我就能知道这堆对象里哪些我能改,哪些能查,哪些能删,并且关联其他表的话我还可以知道我能不能关联出这些数据。
|
|
返回顶楼 | |
发表时间:2009-04-25
如果当前用户对某个对象没有更新权限,代码
obj.name="" 就会报异常,在没有执行save之前,保证该对象在python里的值与数据库中一致 |
|
返回顶楼 | |
发表时间:2009-04-25
还是决定在sqlalchemy上进行扩展
|
|
返回顶楼 | |