1つの整数内で多くのアクセス制御フラグを表すために、ビット演算を使用しています。
ADMIN_ACCESS = 1;
EDIT_ACCOUNT_ACCESS = 2;
EDIT_ORDER_ACCESS = 4;
var myAccess = 3; // ie: ( ADMIN_ACCESS | EDIT_ACCOUNT_ACCESS )
if ( myAccess & EDIT_ACCOUNT_ACCESS ) { // check for correct access
// allow for editing of account
}
これのほとんどは私のプロジェクトのPHP側で発生しています。|
ただし、誰かのアクセスレベルを保存するときに使用して、Javascriptを使用して複数のアクセスフラグを結合する部分が1つあります。これはある程度うまく機能します。整数(フラグ)が大きくなりすぎると(> 32ビット)、Javascriptのビット演算子では正しく機能しなくなることがわかりました。例えば:
alert( 4294967296 | 1 ); // equals 1, but should equal 4294967297
アクセス制御フラグの数を32に制限する必要がないように、この回避策を見つけようとしています。各アクセス制御フラグは、他の制御フラグと干渉しないように、前の制御フラグの2倍です。
dec(4) = bin(100)
dec(8) = bin(1000)
dec(16) = bin(10000)
これらのフラグの2つを単純なものと一緒に追加する+
と、ビット演算と同じ答えが得られるように見えますがor
、これが単純な置換であるか、問題がある可能性があるかどうかに頭を悩ませていることに気付きました。これを行うことで。誰かがこの回避策の有効性についてコメントできますか?例:
(4294967296 | 262144 | 524288) == (4294967296 + 262144 + 524288)