Node.js 用户权限的实现
我正在NodeJS(使用TypeScript)和MongoDB(使用mongoose)中构建一个web应用程序 在我的应用程序中,我有6种类型的权限。 为了简单起见,让我们使用P1、P2、…、P6来表示我的权限 此外,该应用程序还有多个组织 应用程序中的每个用户都属于一个组织,并且可以对每个组织(不一定是他所属的组织)拥有多个权限(P1-P6) 例如: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
- 用户“U1”属于“O1”组织,具有组织“O1”中的权限P1、P3和权限 组织“O2”中的P2、P6
- 用户“U2”属于“O2”组织,具有组织“O2”中的权限P1
- 用户“U3”属于“O1”组织,没有权限
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应用程序中了解其集成:
每个组织都可以更改其用户的权限,因此这种方法并不真正适合我。。。