V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
wangxiaoaer
V2EX  ›  问与答

权限问题

  •  
  •   wangxiaoaer · 2020-04-27 09:43:54 +08:00 · 776 次点击
    这是一个创建于 1484 天前的主题,其中的信息可能已经有所发展或是发生改变。

    假如有一个应用,涉及到部门、人员等实体,部门是树状的,人员归属于部门。

    部门经理可以查看自己部门(包括下属部门)的所有用户,那么在提供用户查询这个 api 的时候有两种方式:

    1 /api/user

    不带参数,后台自动根据当前登陆角色查询出有权限查看的用户,比如系统管理员返回所有,部门经理返回当前部门人员,相当于根据身份在进行 sql 查询的时候增加额外的过滤语句。

    2 /api/user?department=xxx

    需要前端显式提供部门 id 之类,后台对当前登陆角色的部门跟查询部门进行校验,然后根据提供的部门 id 去查询。

    那种更优呢?

    另外,顺便问一下:

    3 管理员这种角色是分配到根部门还是设置为 null ?

    2 条回复    2020-04-27 09:56:37 +08:00
    bnm965321
        1
    bnm965321  
       2020-04-27 09:48:46 +08:00
    1 好一点,2 的话首先需要用户知道自己是哪个 /哪几个部门,然后如果 department id 不对应,后端也应该返回 403,绕了好大一个弯。

    API 的幂等性,指的是相同的输入得到相同的输出。我觉得不同类型的用户也应该算作是不同的输入。
    kaneg
        2
    kaneg  
       2020-04-27 09:56:37 +08:00 via iPhone
    我觉得 1 和 2 不冲突。查询的最终结果是由权限和查询条件共同作用生成的。1 和 2 只是查询过滤条件不同。1 )代表在自己权限范围内查看自己能看得所有用户,2 )代表在权限范围内查看指定的部门,但很有可能这个部门的人自己一个都没权限看。

    至于权限和过滤条件如何在实现层面共同起作用,就要看你用的是什么样的权限框架,比如 RBAC 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2147 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 338ms · UTC 00:25 · PVG 08:25 · LAX 17:25 · JFK 20:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.