ホームページ >バックエンド開発 >PHPチュートリアル >パーミッションコードは32ビットのint型でバイナリで制御します。例えば、パーミッションコードの合計が1000の場合、4桁目はパーミッションがあり、それ以外はパーミッションが無いことを意味します。 ?

パーミッションコードは32ビットのint型でバイナリで制御します。例えば、パーミッションコードの合計が1000の場合、4桁目はパーミッションがあり、それ以外はパーミッションが無いことを意味します。 ?

WBOY
WBOYオリジナル
2016-06-13 12:13:151045ブラウズ

パーミッションコードは32ビットのint型でバイナリで制御します。例えば、パーミッションコードの合計が1000の場合、4桁目はパーミッションがあり、それ以外はパーミッションが無いことを意味します。 ?
バイナリは 32​​ ビット int 型を使用して、どのビットに権限があるかを示します。次の 32 ビット バイナリは権限コードを示します。
すべてに権限がある場合: 11111111 11111111 11111111 11111111 //(以下の最初の 00000 は省略できます)。
最下位の桁のみに権限があります: 00000000 00000000 00000000 00000001
最初の桁に権限があります: 00000000 00000000 00000000 00000010
2 桁目に権限があります: 00 000000 00000000 00000000 00000100
複数の権限: 00000000 00000101 / / (これが最後と 2 番目の権限です)
私が聞きたいのは、0 の場合は権限の増加です。1 番目は権限の検索、2 番目は更新権限です。3 桁は次のとおりです。削除権限、
ですが、権限が 1 つしかない場合、この人が権限を持っているかどうか、または指定された権限コードが複数の権限に対するものである場合、どのような権限を持っているかをどのように判断すればよいでしょうか?
取得した許可コードをメソッドに入れて判断できるメソッドを誰かが書けるかどうか見てみましょう。
実際に判断しなければならないのは、それをフロントエンドに配置し、フロントエンドインターフェイスに 4 つのチェックボックスを表示することです。
Add Delete Modify Delete // バックエンドが存在すると判断した場合。ユーザーがインターフェイスに入るときに表示される 2 つの権限は、2 つのチェック ボックスが直接オンになっていますか? ? ? ?ここで、PHP でのアクセス許可の設定の問題が発生します。アドバイスをいただけますか。 ? ? 、? ? /、? ? ? ?


-----ソリューションアイデア----------------------
参考Linux の権限を設定する方法 777 755.... フロントエンド ディスプレイは、その権限に応じて表示できます。
-----解決策のアイデア---------- ---- --------
分割と判断はこの2ステップで行う必要があります。 。

私が見た権限のほとんどは 1、1、1、1、1、1、1、1 で、区別しやすいように記号で区切られています。
------解決策----------------------
は非常に簡単で、ビットは同じです

$权限 = array(<br />  '增加' => 0b1,<br />  '查找' => 0b10,<br />  '更新' => 0b100,<br />  '删除' => 0b1000,<br />);<br /><br />$权限字 = 0b101;<br /><br /><br />foreach($权限 as $k=>$v) {<br />  printf("<input type=checkbox name=permit[] value=%s %s>%s<br>\n", $k, $权限字 & $v ? 'checked' : '', $k);<br />}
<input type=checkbox name=permit[] value=增加 checked>增加<br><br /><input type=checkbox name=permit[] value=查找 >查找<br><br /><input type=checkbox name=permit[] value=更新 checked>更新<br><br /><input type=checkbox name=permit[] value=删除 >删除<br><br /><br />

-----ソリューションのアイデア----------------------
$权限 = array(<br />  '增加' => 0b1,<br />  '查找' => 0b10,<br />  '更新' => 0b100,<br />  '删除' => 0b1000,<br />);<br /><br />$权限字 = 0b101;<br /><br />foreach($权限 as $k=>$v) {<br />  printf("<input type=checkbox name=permit[] value=%s %s>%s<br>\n", $v, $权限字 & $v ? 'checked' : '', $k);<br />}
<input type=checkbox name=permit[] value=1 checked>增加<br><br /><input type=checkbox name=permit[] value=2 >查找<br><br /><input type=checkbox name=permit[] value=4 checked>更新<br><br /><input type=checkbox name=permit[] value=8 >删除<br><br /><br />

-----解決策のアイデア----------------------
問題を検討する複数の権限の場合、 pow の 2 番目のパラメータは増加し続けることができます。理解できたかわかりません
<br />$add=pow(2,1);//2<br />$del=pow(2,2);//4<br />$update=pow(2,3);//8<br />$query=pow(2,4);//16<br /><br />//增加&删除<br />$p=$add+$del;<br />if(getstatus($p,1)){//1是查询<br />	echo '有增加的权限<br>';<br />}<br />//增加&删除&修改<br />$p=$add+$del+$update;<br />if(getstatus($p,3)){//3是修改<br />	echo '有修改的权限<br>';<br />}<br />if(!getstatus($p,4)){//4是查询<br />	echo '没有查询的权限<br>';<br />}<br /><br />function getstatus($status,$p){<br />	$t = $status & pow(2, $p) ? 1 : 0;<br />	return $t;<br />}<br />

-----解決策のアイデア--------------------- -
32 種類の権限を設定し、単一のフラグにこの権限があるかどうかを判断できるようになりました
<br />getAuth($postStatus, $targetStatus){<br />    return $status & $targetStatus;<br />}<br />getAuth(0x21f, 0x78);    //判断是否有 00000000 00000000 00000000 011111000权限<br />

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。