2017-01-20 20 views
0

NodeJS(TypeScriptを使用)とMongoDB(mongooseを使用)でWebアプリケーションを構築しています。ユーザ権限の実装

私のアプリケーションには6種類の権限があります。 簡単にするために、P1、P2、...、P6を使用して自分の権限を表してください。

さらに、このアプリケーションにはいくつかの組織があります。

アプリケーション内の各ユーザーは1つの組織に所属し、組織ごとに複数のアクセス許可(P1〜P6)を持つことができます(必ずしも所属するものではありません)。例えば

  • ユーザ 'U1' は P2を 'O1' 組織、権限P1を有し、P3組織における 'O1' に属し、許可、P6組織の 'O2'。
  • ユーザー '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', 
} 

列挙型の数値(1-6)だけではなく、 もちろん、権限名(P1〜P6)は実際の権限名に置き換えられます。たとえば、P1はAdministratorです。

私の現在の実装についてはわかりませんが、私がうまくやっているのか何かを変えなければいけないと意見を出したいと思います。

私のコードと考え方を批判してください。ありがとう、

Ron

答えて

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} })

+0

各組織は、そのユーザーにアクセス権を変更することができますので、この方法ではない本当に私に合っ...:あなたはExpressjs +マングースアプリでの統合について読むことができます – Ron537

関連する問題