【问题标题】:Role based access control where a user can have multiple roles in multiple scenarios基于角色的访问控制,其中用户可以在多个场景中拥有多个角色
【发布时间】:2021-06-09 09:34:52
【问题描述】:

我正在创建一个 MERN 应用程序,其中有多个用户并且每个用户都指定了他们的特定角色。一个用户还可以在两个不同的场景中同时拥有两个角色。

场景:一个用户可以有多个站点,一个站点可以有多个用户。创建站点 (site1) 的用户 (user1) 将是 Owner 并且能够在站点 (site1) 上执行 CRUD 操作,但是当 Owner 邀请另一个用户 (user2) 到站点时,新的user(user2) 是该站点(site1) 的Editor,他只能读取和更新站点(site1)。

同样,如果第二个用户(user2)创建了另一个站点(site2),他就是这个站点(site2)的Owner和site1的Editor

因此,基本上用户将是他自己创建的网站的所有者,并且将是所有者与他共享的网站的编辑者。他是自己网站的Owner 和共享给他的网站的Editor。我不太确定理想的架构设计应该是什么。

到目前为止我创建的两个架构UserSite

用户架构

const UserSchema = new mongoose.Schema({
    name: {type: String},
    email: {type: String},
    sites: [{ site: { type: mongoose.Schema.Types.ObjectId, ref: 'Site' },
              siteRole: { type: String } } 
           ]})

module.exports = mongoose.model('User', UserSchema)

站点架构

const SiteSchema = new mongoose.Schema({
     name: { type: String },
     url: { type: String },
     users: [{ site: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
              siteRole: { type: String } } 
           ]})
    })
module.exports = mongoose.model('Site', SiteSchema)

角色 1:Owner:可以CreateReadUpdateDeleteInvite an editor 一个站点。

角色2:Editor:只能ReadUpdate一个站点。

【问题讨论】:

    标签: node.js mongodb express mongoose database-design


    【解决方案1】:

    我无法评论您,但您的业务逻辑中是否需要有 2 个集合?如果没有,您可以在定义 isOwner 的 UserSchema 中添加两个数组:[/他是所有者的网站/] 和 isEditor:[/他是编辑者的网站/]

    【讨论】:

      猜你喜欢
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 2014-01-31
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多