请问区分栏目,用户多对多可能性的权限管理,有什么好的解决方案吗?

2016-04-23 08:51:30 +08:00
 xjdata

如:有

  1. 栏目 a/b/c/d,
  2. 用户user1/2/3/4
  3. 管理admin1/admin2

其中:

  1. user1有所有栏目发帖权限.
  2. user2,有b/c栏目发帖权限
  3. user3有d栏目发帖权限
  4. user4 有a/c/d栏目发帖权限
  5. 所有用户可编辑自己的帖子,不能删除自己的帖子

管理:

  1. admin1有删除所有用户帖子的权限.
  2. admin2只能编辑和删除 user1,user4 2个用户的帖子
  3. admin3只能编辑 user3的帖子

我使用的是yii2框架,通过yii自带的rbac可以实现上述需求,但是接下来的需求彻底没方向.

现在有 管理员 admin3:

  1. 可编辑 user1a,c栏目的帖子(user1本身可在所有栏目发帖,但admin只能管理user发布在a,c2个栏目的帖子)
  2. 可编辑 user2b,栏目的帖子(user2同上)
  3. 可编辑栏目 d中 user1,4的帖子(栏目d,本身可以被user1,3,4三个用户发帖,但admin3只能管理1,42个账户的帖子)

简单说, 就是某个管理员针对不同的栏目/用户, 或针对不同的用户/栏目 进行权限管理. 有多个管理员的情况下,这种交叉应该会非常多变.(用户,栏目是多对多的情况).

请问有什么已经有的方案吗? 还请大家多多指导. 谢谢.

1495 次点击
所在节点    问与答
8 条回复
just4fan
2016-04-23 08:57:03 +08:00
rbac 实现不了?
xjdata
2016-04-23 09:02:29 +08:00
@just4fan 第一次搞没有这方面的经验. 想着很复杂, 没有头绪,就懵了. rbac 的层级模式肯定可以实现,对于在线量峰值 400 用户, 权限项目 500 左右的应用不知道会不会很慢. 我举例中的 栏目 实际上大概有 500 个. 用户 400 个, 管理员角色一般在 100 个左右, 用户 大概 200 个左右.
just4fan
2016-04-23 09:08:13 +08:00
@xjdata 目前阶段我也没性能方面的经验 😂 我觉得就是一个判断而已 应该对性能影响不大 这个还可以结合数据库实现貌似,一张权限表里存放管理员和用户的对应可编辑关系什么的
xjdata
2016-04-23 09:12:20 +08:00
@just4fan 恩 yii 自带的 rbac 有 4 张数据表. 之前有人说过 不到 10 万并发没必要考虑性能.

性能不是我问题的主要内容.

就是觉得判断很复杂,

比如 管理员角色, 在某个栏目下,获取自己在当前栏目内的可管理用户列表.
某用户发帖的时候,获取 自己在某栏目下的管理员列表.

呃.... 第一次搞 rbac, 文档看了很多遍了. 方法啥都熟悉, 就是觉得很乱.... 上来找老司机问个路. 也许能让自己少遇到一点坑.
xjdata
2016-04-23 09:14:21 +08:00
其实我实际应用. 是容许批量发帖的. 而且发帖的目标可以是不同的栏目.... 就觉得更乱了.

比如我想在用户发帖的时候 根据当前发布的所有帖子(不同的栏目), 判断本次发帖的 管理员都是谁. 然后优化一下, 根据管理员, 将我发布的帖子 分成及部分, 提交给不同的管理员进行操作.
xjdata
2016-04-23 09:16:30 +08:00
这里就出来一个麻烦的事情
1. 可能 某几个帖子 有共同的管理员,
2. 也有帖子只有一个管理员
3. 没管理员的帖子, 全部交给一个默认的管理员

这里的实现方法, 一点头绪都没.
just4fan
2016-04-23 09:17:52 +08:00
@xjdata 砍掉批量发帖 😜
xjdata
2016-04-23 09:23:11 +08:00
@just4fan 呃..... 不行. 去掉容许批量发布到不同栏目的功能,整个项目就没什么意义了.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/273804

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX