该怎么解决这样的复杂条件角色系统的建模? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
abcbuzhiming
V2EX    程序员

该怎么解决这样的复杂条件角色系统的建模?

  •  
  •   abcbuzhiming 2018 年 10 月 11 日 3145 次点击
    这是一个创建于 2735 天前的主题,其中的信息可能已经有所发展或是发生改变。
    很多带有用户功能的系统,都会额外的搭配一套用户组(角色),权限系统,一般来说,我们用用户组划分用户群,然后把权限赋予用户组,这样一个用户用户组权限的结构就搭建起来了。
    这种结构能适应不太复杂的环境,比如一个企业下面有若干个部门,每个部门一个用户组就行了,但是我在实践中遇到了新的情况,在一套系统里,有的时候用户组非常简单,用的用户组却受到复杂的额外条件约束,比如,在某个学院里,学校有若干个部门,每个部门就是一个用户组,这是最简单的情况,但是额外的,学校要求我们设置某种信息员用户组,每个专业的每个年级,各有 1 名信息员;再比如他们有院级督导,每个院 1 人;还有班级督导,每个班一人。。。。
    以上只是举例,我感觉像这样的系统里,用简单的用户组来建立模型无法适配用户组带有条件约束的情况,如果硬性的给用户组带上条件约束,又不够通用,如果又出现了新的条件约束,需要对用户组进行添加功能时,改动代价很大。有没有更通用的设计方案?
    21 条回复    2019-07-13 14:28:29 +08:00
    LokiSharp
        1
    LokiSharp  
       2018 年 10 月 11 日
    参考 Unix 一个用户可以有多个组的权限
    TomatoYuyuko
        2
    TomatoYuyuko  
       2018 年 10 月 11 日
    在前端做过类似的权限管理系统不知道是不是你说的这种
    人员→角色→权限,一个人可以赋予多个角色,每种角色可以拥有多个权限,权限还可以分地区赋予,,
    imn1
        3
    imn1  
       2018 年 10 月 11 日
    最简单的思想就是文件系统
    同一个文件可以放到不同的路径,如果不想重复占用空间,就用软链、硬链、Alias ……
    abcbuzhiming
        4
    abcbuzhiming  
    OP
       2018 年 10 月 11 日
    @LokiSharp 你说的不是我的问题,我的系统里一样可以用户加入多个组,现在问题是组这一级的约束条件过于复杂


    @TomatoYuyuko 关键在于角色本身受多种条件约束,而且这种条件在可预期的未来会不断增加,如何建立针对角色的通用模型非常困难
    Youen
        5
    Youen  
       2018 年 10 月 11 日
    根据情况取舍, 比如给角色加数据权限
    mcfog
        6
    mcfog  
       2018 年 10 月 11 日
    架空角色的概念即可

    权限点直接属于人,角色的概念只是一个方便批量赋权的快捷权限组合

    唯一要想清楚的是角色内包含的权限发生变化的时候对人的影响,最完美的是需要在人-权限关系上追踪这个关系是继承自哪个角色的还是手动增减的,或者干脆把这个关系记录为{人,权限,来源},人+权限允许有多条记录,有任何一条有效就认为有权限
    jswh
        7
    jswh  
       2018 年 10 月 11 日
    控制反转
    把人属于某个角色从而获得某个权限,转成人拥有某个权限从而成为了某个角色。
    monsterxx03
        8
    monsterxx03  
       2018 年 10 月 11 日
    设置 policy, 权限只设计在 policy, policy 可以加在用户或组上, 在组内的用户自动继承组的 policy
    abcbuzhiming
        9
    abcbuzhiming  
    OP
       2018 年 10 月 11 日
    @Youen
    @mcfog
    @jswh
    首先谢谢你们,但是你们提的解决方案,其实是把用户和角色的关系解除,但是对我提出的“描述角色组自身的约束条件复杂多变”这个问题,没有帮助,因为我需要在系统里明确的向用户展示,某个用户是什么身份(用户组),而这个用户组自身又有哪些条件约束(可能只是用于标识单一部门;但也可能更复杂属于学院+年级,或者属于专业加年级)
    jswh
        10
    jswh  
       2018 年 10 月 11 日
    @jswh 没写完就发出去了。这样,角色和权限的关系不变,人和之和权限发生关系。新建角色的时候,只是新建了一组权限和角色映射。人和角色的关系有点鸭子模型,并不关心人的角色,只关心人的权限,只要权限到位了,既可以是角色 A 也可以是角色 B。
    以前想过,后来没写。
    mcfog
        11
    mcfog  
       2018 年 10 月 11 日
    @abcbuzhiming 不用解除用户和角色的关系,人还是可以有一个或多个角色,拿来展示也好什么也好都可以啊

    这样说吧,RBAC 是类似这样的 User => Role => Permission,你现在碰到的是业务复杂到继续这个模型难以描述,所以我的建议是改成 Permission <=X= User => Role,其中这个 X 的计算过程,可以读 Role 也好年纪学院也好,星座也罢,都可以
    elone
        12
    elone  
       2018 年 10 月 11 日 via iPhone
    最近刚设计了权限系统,感觉很好。可以了解一下 casbin。
    menc
        13
    menc  
       2018 年 10 月 11 日
    这古老的话题。。。
    仔细一琢磨你这全线系统不就是论坛么。

    论坛普通会员有等级,等级低只能看帖,高点能发帖,再高点还能加减金币。
    还有全局的管理员若干,可以进行删帖和全站公告。
    “但是额外的,学校要求我们设置某种信息员用户组,每个专业的每个年级,各有 1 名信息员” ->这就是版主,论坛每个版块都要搞一个管理员,只能在版块内删帖
    “再比如他们有院级督导,每个院 1 人;还有班级督导,每个班一人”->这就是论坛父子板块的概念
    论坛还更复杂呢,有站务板块,只能管理层进;还有动态板块,只允许满足某种条件的人进入(充钱了,积分>xxx )的,比这个难多了

    好好看看论坛用户体系怎么做的。
    bk201
        14
    bk201  
       2018 年 10 月 11 日
    没明白,一个用户组权限不够他,就再加一个用户组权限给他不就好了?用户组又不固定,只是个权限集合的代名词罢了.
    xuanbg
        15
    xuanbg  
       2018 年 10 月 11 日
    角色不是根据条件自动形成的,是需要人自己去新建的。实际需要什么角色就建什么角色,并把相应的权限赋予该角色。然后,把用户和角色进行关联就行了。
    sniffles
        16
    sniffles  
       2018 年 10 月 11 日
    基本模型:权限点和用户。前者对应单一具体功能,后者对应人。

    角色就是权限点的组合而已,方便配用户的
    icylogic
        17
    icylogic  
       2018 年 10 月 11 日 via iPhone
    用户只简单地加 tag,根据 tag 做处理。不把逻辑混在数据里,
    luozic
        18
    luozic  
       2018 年 10 月 11 日
    RABC 权限模型; 实际的,研究一下微软的域控和 unix 的账户权限是怎么搞得,比你这个复杂的多得多了。
    rrfeng
        19
    rrfeng  
       2018 年 10 月 11 日 via Android
    资源
    操作
    用户
    角色
    用户组
    zjsxwc
        20
    zjsxwc  
       2018 年 10 月 11 日
    参考 Unix 一个用户可以有多个组的权限
    hsluoyz
        21
    hsluoyz  
    PRO
       2019 年 7 月 13 日
    Casbin 实现了一套 RBAC with Domains 模型,应该可以满足复杂角色建模问题: https://casbin.org
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3186 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 13:38 PVG 21:38 LAX 06:38 JFK 09:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86