caravel 控制某角色只能看到自己的表
2016-11-05 11:03
429 查看
背景:
每个用户应该只能看到自己有权限的表,但是我拿到这个版本的时候 caravel还没做限制,即用户可以看到所有表。
然后我就用自己的方法 限制了,如下:
#views.py
class FilterTables(CaravelFilter):
def apply(self, query, func): # noqa
if any([r.name in ('Admin', 'Alpha') for r in get_user_roles()]):
return query
sql="""
select * from ab_view_menu where id in
(select view_menu_id from ab_permission_view where id in
(select permission_view_id from ab_permission_view_role where role_id=5)
and permission_id=31
)
"""
logging.info(sql)
result=db.session.execute(sql)
idsinfo=result.fetchall()
ids=[]
for item in idsinfo:
ids.append(item[1].split(':')[1].split(')')[0])
qry = query.filter(self.model.id.in_(ids))
return qry
增加了一个内部类之后,调用:
#views TableModelView 代码段中调用
base_filters = [['id', FilterTables, lambda: []]]
#post_add(self, table)函数前
当当当当,完毕。
回到GitHub上看了一眼,呀,版本升级,已经实现了呀。
看了下代码,人家风格更统一呢,
你看人家是这样写的:
#views.py
class TableSlice(CaravelFilter):
def apply(self, query, func): # noqa
if any([r.name in ('Admin', 'Alpha') for r in get_user_roles()]):
return query
perms = self.get_perms()
tables = []
for perm in perms:
match = re.search(r'\(id:(\d+)\)', perm)
tables.append(match.group(1))
qry = query.filter(self.model.id.in_(tables))
return qry
#views.py 调用
base_filters = [['id', TableSlice, lambda: []]]
都可以哦~ 你可以自己看情况来。
每个用户应该只能看到自己有权限的表,但是我拿到这个版本的时候 caravel还没做限制,即用户可以看到所有表。
然后我就用自己的方法 限制了,如下:
#views.py
class FilterTables(CaravelFilter):
def apply(self, query, func): # noqa
if any([r.name in ('Admin', 'Alpha') for r in get_user_roles()]):
return query
sql="""
select * from ab_view_menu where id in
(select view_menu_id from ab_permission_view where id in
(select permission_view_id from ab_permission_view_role where role_id=5)
and permission_id=31
)
"""
logging.info(sql)
result=db.session.execute(sql)
idsinfo=result.fetchall()
ids=[]
for item in idsinfo:
ids.append(item[1].split(':')[1].split(')')[0])
qry = query.filter(self.model.id.in_(ids))
return qry
增加了一个内部类之后,调用:
#views TableModelView 代码段中调用
base_filters = [['id', FilterTables, lambda: []]]
#post_add(self, table)函数前
当当当当,完毕。
回到GitHub上看了一眼,呀,版本升级,已经实现了呀。
看了下代码,人家风格更统一呢,
你看人家是这样写的:
#views.py
class TableSlice(CaravelFilter):
def apply(self, query, func): # noqa
if any([r.name in ('Admin', 'Alpha') for r in get_user_roles()]):
return query
perms = self.get_perms()
tables = []
for perm in perms:
match = re.search(r'\(id:(\d+)\)', perm)
tables.append(match.group(1))
qry = query.filter(self.model.id.in_(tables))
return qry
#views.py 调用
base_filters = [['id', TableSlice, lambda: []]]
都可以哦~ 你可以自己看情况来。
相关文章推荐
- Sqlserver中 登录用户只能看到自己拥有权限的库
- vsftpd控制用户禁止访问上级目录 只能访问自己目录
- 使SQL用户只能看到自己拥有权限的库(图文教程)
- Sqlserver中 登录用户只能看到自己拥有权限的库
- 控制文档库,只能访问自己上传的文档
- SQL Server 登录用户只能看到自己拥有权限的库
- SQL Server 2008等登录用户只能看到自己的数据库设置办法
- SQL Server 2008等登录用户只能看到自己的数据库设置办法
- 使SQL用户只能看到自己拥有权限的库
- 如何让SQL用户只能看到自己拥有权限的库
- 为什么人往往只能看到自己愿意相信的真相
- 让WordPress作者后台只能看到自己的日志
- odoo8.0【行级别权限】 变相实现员工只能看到归属自己的单据
- 在左侧的project目录中 看不到项目的文件结构图 只能看到几个idea自己生成的文件
- 最近根据别人提示的一个想法,东拼西凑,终于实现了android系统中只能看到自己的系统,我称之为唯一系统。 很多企业做设备或是做产品的或是集成商 其中的一部分设备直接用android智能机。担是又不让
- Sqlserver中 登录用户只能看到自己拥有权限的库
- 使SQL用户只能看到自己拥有权限的库
- 创建只能看到自己有权限库的登录名和用户
- 让用户只能看到自己有权限的数据库
- 使SQL用户只能看到自己拥有权限的库