V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
blakefan
V2EX  ›  程序员

请教一个权限系统设计的问题?

  •  
  •   blakefan · 2016-11-15 10:10:13 +08:00 · 3387 次点击
    这是一个创建于 2690 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教大家一个关于权限系统设计的问题,我们系统以后将会有直营店,加盟店,会员,供应商,员工 这么多的角色,这样的系统该如何设计呢?请高人指点一二,谢谢了

    9 条回复    2016-11-15 21:14:37 +08:00
    Felldeadbird
        1
    Felldeadbird  
       2016-11-15 10:22:44 +08:00
    直营店,加盟店,会员,供应商,员工 单独做后台管理。
    然后使用前后端分离。 统一请求一个后台后台,在后端再依据请求的账号去判断 对应的权限。这样可以减少很多重复的业务逻辑。当然,有时候适当的重复比在单一业务逻辑 添加各种 权限判断会更好。
    写完才发现你说的是以后才有。那就是依据功能进行权限设计就行了。
    fullStackDude
        2
    fullStackDude  
       2016-11-15 11:17:27 +08:00
    Table:
    -organizations
    -permissions
    -roles
    -users

    然后你把直营店/加盟店/供应商分别作为 organization 的不同 type
    然后 under each organization, 设立不同的 role ,比如说 admin/manager/user/customer/...
    然后 map each role with different permissions ,可以用 wildercard 作为 permission check ,比如 VIEW${服务的名字}$ALL, VIEW${服务的名字}$SELF
    然后给每个 actual 的 user assign role 就好了,我觉得这样比较 scalable....

    关系的话
    organizations >--organizations_roles--< roles
    roles >--roles_users---< users
    permission >---roles_permissions--< roles

    How so?
    klgd
        3
    klgd  
       2016-11-15 12:38:29 +08:00
    都是哪些人会用这些权限?区分清楚人了,才好说权限
    zhuf
        5
    zhuf  
       2016-11-15 13:43:43 +08:00
    跟我们现在做的系统差不多,每个子系统权限都是独立的,用户访问 api 通过 jwt 中的信息去判断是否有权限
    mynameisny
        6
    mynameisny  
       2016-11-15 14:34:28 +08:00
    @zhuf RESTFul 有一个问题想请教, RESTFul 风格的 API 通常要设计成无状态的,那么 JWT 是否需要持久化在服务器中(比如 Redis )。
    既然是无状态的,那么 Server 端就不应该将 Token 保存到 Session 或数据库中,那么如何能保证一个用户在一段时间只能有一个 Token 是可用的?
    c0rpse
        7
    c0rpse  
       2016-11-15 14:37:43 +08:00 via Android
    搜索 RBAC
    Ouyangan
        8
    Ouyangan  
       2016-11-15 21:08:31 +08:00
    通常就是 RBAC 模型进行拓展 ,不要脸做个广告 ,哈哈 , 看看我刚推送上去的代码? 里面有 powerdesigner 模型文件,完整的权限实现 .代码略渣凑合看看
    https://git.oschina.net/ouyangan/hunt-admin
    https://github.com/Ouyangan/hunt-admin
    garrydzeng
        9
    garrydzeng  
       2016-11-15 21:14:37 +08:00
    @mynameisny 把某些信息加密(比如 RSA )后发给客户端当令牌,比如每次登录都有个登录时间之类的,判断是否有效就是判断令牌里保存的时间戳是不是晚于最近登录时间。另外无状态应该指的是会话状态由客户端负责维护而不是不保存状态。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3212 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 14:19 · PVG 22:19 · LAX 07:19 · JFK 10:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.