我正在使用NodeJS(使用TypeScript)和MongoDB(使用mongoose)构建Web应用程序。
在我的应用程序中,我有6种类型的权限。 为简单起见,我们使用P1,P2,...,P6来表示我的权限。
此外,该应用程序有几个组织。
应用程序中的每个用户都属于一个组织,并且每个组织可以拥有多个权限(P1-P6)(不一定是他所属的组织)。
例如:
我正在尝试在用户模式中实现此结构(使用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',
}
我将此枚举用作字符串值,因为我认为拥有权限的字符串值而不仅仅是枚举数值(1-6)更好。 当然,权限名称(P1-P6)将替换为实际权限名称 - 例如P1为Administrator。
我不确定我目前的实施情况,并希望得到一些意见,无论我做得好还是应该改变一些事情。
请随意批评我的代码和思维方式。
谢谢,
罗恩。
答案 0 :(得分:0)
您也可以直接在userSchema上添加角色。这样的事情呢?除非每个组织都要定制他们的权限?
var userSchema = 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'
},
admin :{type:Boolean},
superAdmin :{type:Boolean},
globalAdmin :{type:Boolean}
})
答案 1 :(得分:0)
您可能会对CASL感兴趣。您可以在Expressjs + mongoose app中了解它的集成:
https://medium.com/@sergiy.stotskiy/authorization-with-casl-in-express-app-d94eb2e2b73b