目前打算用 rbac 管理公司项目的权限,建立了五张表,user,role,permission,role_permission,user_role,不使用外键,我使用的是 sqlalchemy 。 现在问题是:
1.不使用外键之后,查询操作好像变麻烦了,比如我要查用户,带出他的角色,那我就要先查出用户,根据 user_id 再执行一次操作,从 user_role 中找出 role_id,如果需要角色名信息,我还要用 role_id 去 role 表中再查出 role_name 。感觉自己要手动执行三次 sql 查询,麻烦了。 还有就是,我创建用户,需要先从 role 表中查询出 role_id,然后把用户数据插入 user 表,再拿到 user_id 和 role_id 一起插入 user_role 表,一次查询和两次插入,都是自己手动在 orm 中维护,代码量增加不少,变得更麻烦了。而且两次插入我是启事务执行的,这个是不是就变得和外键一样了?
2.rbac 是在后台给角色配权限名,那开发者每写一个接口,都去后台指定哪些角色可以 access 这个接口,会不会比较麻烦,各位怎么看
各位大佬给萌新一个建议吧。 感觉自己好纠结,开发也有两年了,每每做项目都会纠结,好不开心啊,可每当我写起代码时,思索逻辑时,我心中仍然还有热情,大佬们指点一下吧
1
johnsona OP sigh
|
2
yc8332 2020-05-23 15:33:03 +08:00
不用外键就不能连表查找了吗?只是不在数据库定义外键而已。
|
3
xuanbg 2020-05-23 15:42:29 +08:00
手写 sql
|
6
youngce 2020-05-23 17:01:31 +08:00
class Employee:
first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30) company = models.ForeignKey(Company, on_delete=models.CASCADE, db_constraint=False) django 的 orm 可以通过 db_constraint 设定外键为逻辑外键,不在数据库建立物理外键。sqlalchemy 难道没有类似的功能? |
7
JellyDong 2020-05-23 17:11:09 +08:00
不知道这个表行不,之前自己看一些资料摸索的 https://github.com/jellydong/LJDAPP
可以控制到按钮 |
10
anaf 2020-05-23 18:17:41 +08:00
我做了个项目,包含有权限系统的 。做成了视频 代码放了 github 但是鉴于没人观看 我来打打广告 行嘛 V 友们
https://www.bilibili.com/video/BV1x5411s7ik/ |
12
anaf 2020-05-24 10:58:00 +08:00
@jsisjs20130824 欢迎关注 往后会出更多 python/IT 工具人相关的视频
|
13
gjquoiai 2020-05-24 17:26:22 +08:00
relationship 可以自定义连接方式
|
15
johnsona OP 更新,我把中间表去掉了,中间表不用外键,那么中间表的数据数据库没办法帮你保持一致性,举个例子,角色权限,我更新这个用户的权限列表,我去中间表中根据 role_id 查出所有 permission_id,然后把新增 permission_id 加进来,老的 permission_id 去掉,还要每次保证 role_id permission_id 唯一,好几把麻烦,直接干掉中间表,permission 用列表替代,爽多了
|
16
hsluoyz 2020-05-26 16:59:39 +08:00
没必要自己写,用 Casbin
|
17
johnsona OP 自己解决了,不用外键是指不用数据库外键,orm 里面的对象关联还是那么写,然后创建数据表不要用 flask-migrate,这会创建数据库的外键,自行写 sql 脚本执行 ddl,其他照旧,完事
|