首页 新闻 会员 周边

多个项目共享同一个用户数据

0
悬赏园豆:30 [待解决问题]

最新项目中遇到一个问题,目前公司有多个项目,但是每个项目都有不同的数据库,最近准备对底层架构进行改进,要求一个账户可以登录所有项目(但是必须经过授权才能登录,比如有三个项目,A,B,C,用户被授权可以登录A后才可以进行登录,B项目虽然也是公司的项目,但是并没有给当前用户权限,所以不能登录)
我的想法是:设计一个单独的用户数据库,分别记录用户的详细信息和被授权可以登录的项目,工作人员可以授权User一个登录A项目的权限,此时如果User登录A项目,此时的流程大概是这样的

  1. 访问用户数据库,查看授权表中该用户是否被授权可以登录A项目
  2. 如果返回已被授权(返回授权码),则访问项目A数据库,查询项目A数据库
    · 1) 如果用户是初次登录项目A,则使用授权码为用户标识符创建用户信息,并返回用户的原始信息
    2)如果不是初次登录,则返回用户相关信息
  3. 如果用户没有被授权,则返回相关的登录失败信息

请问如果按照以上流程进行设计,是否存在相关的不合理的地方,或者是否有更好的施行方案?

清洁人的主页 清洁人 | 初学一级 | 园豆:39
提问于:2019-03-11 14:59
< >
分享
所有回答(3)
0

建一个公共的数据库, 存着用户的权限, 登录时从这个表取出用户的权限, 如果有权限则才登录, 并得到相应的操作权限

风浪 | 园豆:2996 (老鸟四级) | 2019-03-12 10:28
0

建立一个用户数据库没有问题,另外就是不要让个项目直接访问这个数据库,而是提供一个公用的认证API,还有就是认证和授权需要分开处理,认证可以使用统一的API但是权限的管理各系统可能差别很大,很难统一管理。另外不太了解你的授权码是个什么。我做过一个公共的身份认证项目,你可以参考一下:
1.用户使用用户密码访问认证API,换取一个令牌
2.客户端(浏览器)存储令牌到缓存
3.客户端向项目A的每个请求都必须携带令牌
4.项目A的服务器每次都验证令牌的签名
5.签名验证通过就可以确认用户身份合法,给他分配权限
6.项目A中的具体接口中检证权限

当然你也可以将令牌存储到会话里,就不必每个请求都得验证一次令牌

chouyuu | 园豆:237 (菜鸟二级) | 2019-03-14 00:37
0

合并数据库,这个有点麻烦,如果表设计是一样的话直接移植数据,将项目的数据库改成唯一的数据库

一世红尘 | 园豆:321 (菜鸟二级) | 2019-04-02 12:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册