0

現在、私のWebサイトには4つの権限があります

Edit
Delete
Add
View

誰かが他の誰かにサブスクライブすると、誰もが表示権限を取得します。

現在、私はそれぞれをデータベースの列としてビット値として格納しています。

フラグ付きの列挙型を使用する必要があるかもしれないと思っていますが、いくつか質問があります。

  1. ユーザーはユーザーの権限を選択できるようになります(eveyoneはビューを取得しますが、それを取り除くことはできません)。今のところ、チェックボックスを使用してブール値をデータベースに保存するので簡単です。

私の質問は、チェックボックスを列挙型に変換するための最良の方法は何ですか?したがって、追加のアクセス許可を選択した場合は、それを適切な列挙型にマップできます。

より良い方法があるかどうか疑問に思う

PermissionTypes t;
if(add == true)
{
   t = PermissionTypes.Add
}

if(edit == true)
{
   t += PermissionTypes.Edit // not sure if you even can do this.
}

私は列挙型フラグであなたがパイプを使ってこのようなことをすることができることを知っています

PermissionTypes t = PermissionTypes.Add | PermissionTypes.Edit

私の列挙型に別のタイプを含めるのは良い習慣ですか?

AddEdit = Add | Edit

私はそれが多くの組み合わせをもたらす可能性があると考えています(私が10の許可またはそのようなものを持っていたと想像してください)。

4

2 に答える 2

2

列挙型は単なる整数値です。列挙型の値を異なる 2 の累乗に設定することで、必要な組み合わせを簡単に作成できます。

enum ePermissions
{

   None = 0,
   View = 1,
   Edit = 2,
   Delete = 4,
   Add = 8,
   All = 15
}

ePermissions t;
t = (ePermissions)((add?ePermissions.Add:ePermissions.None) | (delete?ePermissions.Delete:ePermissions.None) | ...);

一部のユーザーが追加権限を持っているかどうかを知りたい場合は、次のようにします。

canAdd = (currentPermission & ePermissions.Add) != 0;
于 2012-09-23T01:57:49.630 に答える
0

bool値のセットを列挙型に変換する場合-小さなセットのif場合は問題ありません。?:演算子を使用して、より少ない行数で同じことを行うこともできます。

[Flags]
enum Permissions 
{ 
   None = 0, 
   View = 1, 
   Edit = 2, 
   Delete = 4, 
   Add = 8, 
}

var permissions = 
  (add ? Permissions.Add : Permissions.None) |
  (edit ? Permissions.Edit : Permissions.None) |
  (delete ? Permissions.Delete : Permissions.None);

多数の値がある場合、Control から Enum へのある種のマッピングが役立つ場合があります。

オンAddEdit- この特定のオンはおそらく役に立ちません。簡単に書くことができますAdd | Edit。コードがそのような組み合わせを意味のある方法で使用する場合、パーミッション (またはフォールグ) のいくつかの危険な組み合わせに具体的に名前を付けることができます。すなわちCanModify = Add | View

于 2012-09-23T03:57:25.263 に答える