0

したがって、私たちが作成しているアプリには、ユーザーが持つことができる特定の特権があり、最初は単純なビットマスクを作成し、各特権を個別のビットとして保存し、最終的な値を DB テーブルに long として保存しました。しかし、今では非常に多くのアクセス許可があるため、値がデータベースに収まりきれなくなりました。long ではなく文字列として格納して変換することもできると思いますが、これが問題に対処する最善の方法であるかどうか疑問に思います。

例: ユーザーは 1-3-5-7 の権限を持っています

彼のセキュリティ値は 2^0 + 2^2 + 2^4 + 2^7 = 149 です。

しかし、100 パーミッションを取得すると、2^99 の計算は高価で、DB テーブルで見るのが難しいように見えるため、このアプローチは少し面倒に思えます (長いテーブルよりも大きいため、文字列として格納する必要があります)。パーミッションの数が非常に多くなり、迅速に機能し、複雑すぎない場合、この問題を解決するための別のアプローチを誰かが持っていますか?

4

2 に答える 2

1

私はこれに対する最善のアプローチを見つけたと信じているので、長い間開かれているので、先に進んで自分の質問に答えます。最善のアプローチは、データベース内にユーザーをアクセス許可に結び付ける外部参照テーブルを作成することであるように思われます。

セキュリティテーブル:

ID | ユーザー権利
--------------------------
1 | レコードを編集できる
2 | レコードを作成できる
...等

ユーザーテーブル:

ID | ユーザー名
--------------
1 | ケビン
2 | ボブ
3 | 明細書

外部参照テーブル:

UserID | SecurityID
--------------------
1 | 1
1 | 2
2 | 2
3 | 1
3 | 2

これにより、必要な数の権限を持つことができ、に基づいて権限を作成するためのlongのサイズに制限されません。

于 2013-02-08T18:49:50.200 に答える
0

2番目の長い列を追加できます。権限のインデックスがxより大きい場合は、2番目の列で検索(または保存)しますか?

于 2012-09-28T11:48:43.317 に答える