Node.js 用户权限的实现

Node.js 用户权限的实现,node.js,mongodb,mongoose,permissions,Node.js,Mongodb,Mongoose,Permissions,我正在NodeJS(使用TypeScript)和MongoDB(使用mongoose)中构建一个web应用程序 在我的应用程序中,我有6种类型的权限。 为了简单起见,让我们使用P1、P2、…、P6来表示我的权限 此外,该应用程序还有多个组织 应用程序中的每个用户都属于一个组织,并且可以对每个组织(不一定是他所属的组织)拥有多个权限(P1-P6) 例如: 用户“U1”属于“O1”组织,具有组织“O1”中的权限P1、P3和权限 组织“O2”中的P2、P6 用户“U2”属于“O2”组织,具有组织“O

我正在NodeJS(使用TypeScript)和MongoDB(使用mongoose)中构建一个web应用程序

在我的应用程序中,我有6种类型的权限。 为了简单起见,让我们使用P1、P2、…、P6来表示我的权限

此外,该应用程序还有多个组织

应用程序中的每个用户都属于一个组织,并且可以对每个组织(不一定是他所属的组织)拥有多个权限(P1-P6)

例如:

  • 用户“U1”属于“O1”组织,具有组织“O1”中的权限P1、P3和权限 组织“O2”中的P2、P6
  • 用户“U2”属于“O2”组织,具有组织“O2”中的权限P1
  • 用户“U3”属于“O1”组织,没有权限
我试图在用户模式中实现这个结构(使用mongoose模式),并且需要一些关于我的实现的意见

这是我的用户模式:

var userSchema: mongoose.Schema = new mongoose.Schema({
    _id: {
        type: String
    },
    firstName: {
        type: String,
        required: true
    },
    lastName: {
        type: String,
        required: true
    },
    mail: {
        type: String,
        required: true,
        unique: true
    },
    organization: { // User's organization
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Organization'
    },
    permissions: [{
        organization: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Organization'
        }, 
        permissions: [{
            type: String,
            enum: [
                Permission.P1,
                Permission.P2,
                Permission.P3,
                Permission.P4,
                Permission.P5,
                Permission.P6,
            ]
        }]
    }]
});
对于我使用的权限枚举:

export enum Permission {
    P1 = <any>'P1',
    P2 = <any>'P2',
    P3 = <any>'P3',
    P4 = <any>'P4',
    P5 = <any>'P5',
    P6 = <any>'P6',
}
导出枚举权限{
P1=‘P1’,
P2=‘P2’,
P3=‘P3’,
P4=‘P4’,
P5=‘P5’,
P6=‘P6’,
}
我将此枚举用作字符串值,因为我认为最好使用权限的字符串值,而不仅仅是枚举数值(1-6)。 当然,权限名称(P1-P6)将替换为真实的权限名称-例如P1是管理员

我不确定我目前的执行情况,我想知道我是否做得很好,或者我是否应该改变一些东西

请随意批评我的代码和思维方式

谢谢


Ron.

您也可以直接在您的userSchema上添加角色。像这样的?除非每个组织都要自定义其权限

var userSchema=newmongoose.Schema({
_身份证:{
类型:字符串
},
名字:{
类型:字符串,
必填项:true
},
姓氏:{
类型:字符串,
必填项:true
},
邮寄:{
类型:字符串,
要求:正确,
独一无二:真的
},
组织:{//用户的组织
类型:mongoose.Schema.Types.ObjectId,
参考:“组织”
},
管理员:{type:Boolean},
超级管理员:{type:Boolean},
全局管理员:{type:Boolean}

})

您可能会感兴趣。您可以在Expressjs+mongoose应用程序中了解其集成:


每个组织都可以更改其用户的权限,因此这种方法并不真正适合我。。。