跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • rbac 权限系统不用外键以后,关联操作变麻烦了(救救纠结的孩子吧)
未分類
24 5 月 2020

rbac 权限系统不用外键以后,关联操作变麻烦了(救救纠结的孩子吧)

rbac 权限系统不用外键以后,关联操作变麻烦了(救救纠结的孩子吧)

資深大佬 : jsisjs20130824 3

目前打算用 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 这个接口,会不会比较麻烦,各位怎么看

各位大佬给萌新一个建议吧。 感觉自己好纠结,开发也有两年了,每每做项目都会纠结,好不开心啊,可每当我写起代码时,思索逻辑时,我心中仍然还有热情,大佬们指点一下吧

大佬有話說 (15)

  • 主 資深大佬 : jsisjs20130824

    sigh

  • 資深大佬 : yc8332

    不用外键就不能连表查找了吗?只是不在数据库定义外键而已。

  • 資深大佬 : xuanbg

    手写 sql

  • 主 資深大佬 : jsisjs20130824

    @yc8332 可是麻烦呀,另外创建数据需要把几张表的数据创建放在一个事务中,这是不是就和外键一样了

  • 主 資深大佬 : jsisjs20130824

    @xuanbg 表连接吗

  • 資深大佬 : youngce

    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 难道没有类似的功能?

  • 資深大佬 : JellyDong

    不知道这个表行不,之前自己看一些资料摸索的 https://github.com/jellydong/LJDAPP
    可以控制到按钮

  • 主 資深大佬 : jsisjs20130824

    @youngce 没有,我也知道 django 有这个,这个实际上是底层执行了 join 语句?

  • 主 資深大佬 : jsisjs20130824

    @JellyDong 用的外键

  • 資深大佬 : anaf

    我做了个项目,包含有权限系统的 。做成了视频 代码放了 github 但是鉴于没人观看 我来打打广告 行嘛 V 友们

    https://www.bilibili.com/video/BV1x5411s7ik/

  • 主 資深大佬 : jsisjs20130824

    @anaf tui

  • 資深大佬 : anaf

    @jsisjs20130824 欢迎关注 往后会出更多 python/IT 工具人相关的视频

  • 資深大佬 : gjquoiai

    relationship 可以自定义连接方式

  • 主 資深大佬 : jsisjs20130824

    @gjquoiai 那个自定义的方式处理多对多还是不行,没办法跨过中间表,而且是不是会产生笛卡尔查询

  • 主 資深大佬 : jsisjs20130824

    更新,我把中间表去掉了,中间表不用外键,那么中间表的数据数据库没办法帮你保持一致性,举个例子,角色权限,我更新这个用户的权限列表,我去中间表中根据 role_id 查出所有 permission_id,然后把新增 permission_id 加进来,老的 permission_id 去掉,还要每次保证 role_id permission_id 唯一,好几把麻烦,直接干掉中间表,permission 用列表替代,爽多了

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具