문제
나는 운이 좋게도 이것을 여러 번 시도했습니다.읽고 나서 이 게시물, 이 일을 다시 하고 싶은 마음이 들었습니다.그렇다면 다음이 왜 작동하지 않는지 말해 줄 수 있습니까?
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if( $user == ($editor | $admin) ) {
echo "Test";
}
?>
해결책
비트 OR 연산자(|)를 사용하여 비트를 설정하고 AND 연산자(&)를 사용하여 비트를 확인합니다.코드는 다음과 같아야 합니다.
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if( $user & ($editor | $admin) ) {
echo "Test";
}
?>
바이너리와 비트 연산자의 기능을 정확히 이해하지 못한다면 가서 배워야 합니다.이 작업을 수행하는 방법을 훨씬 더 잘 이해하게 될 것입니다.
다른 팁
PHP를 사용한 지 오랜 시간이 지났지만 이것이 작동할 것이라고 가정하겠습니다.
<?php
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if( ($user == $editor) || ($user == $admin) ) {
echo "Test";
}
?>
나는 이것을 오류보고에 사용했는데 꽤 잘 작동합니다.사용자 권한에 관해서는 매우 잘 작동해야 합니다. 데이터베이스의 각 사용자 권한에 대해 여러 열을 가질 수도 있고 데이터베이스에 하나의 사용자 수준 열을 가질 수도 있습니다.이 옵션을 선택하세요.
(2 | 4)는 6으로 평가되지만 2 == 6은 거짓입니다.
@mk:(2 | 4)는 6으로 평가됩니다.
$guest = 1;
$editor = 2;
$admin = 4;
$user = $editor;
if (user == $editor || $user == $admin) {
echo "Test";
}
멋지네요. CMS에서 권한을 부여하는 가장 좋은 방법인 것 같습니다.예?아니요?
어쩌면, 나는 실제로 그런 식으로 해본 적이 없습니다.내가 한 일은 비트 연산자를 사용하여 데이터베이스의 단일 열에 있는 단일 숫자의 "예 또는 아니오" 설정 전체를 저장하는 것입니다.
권한의 경우 데이터베이스에 권한을 저장하려는 경우 이 방법이 효과적일 것 같습니다.누군가가 일부 콘텐츠를 게시하고 관리자와 편집자에게만 표시되기를 원하는 경우, 결과를 저장하기만 하면 됩니다.
($editor | $admin)
데이터베이스에 넣은 다음 확인하려면 다음과 같이하십시오.
if ($user & $database_row['permissions']) {
// display content
} else {
// display permissions error
}
제 생각에는 이것은 확장성이 좋지 않습니다.실제로 대규모 프로젝트에서 사용해 본 적은 없지만 CMS에서는 이것을 사용하기가 너무 복잡해 보입니다.
그것은 항상 당신이 필요로 하는 것에 달려 있습니다.Zend Framework를 이미 알고 계시다면 이전에 제안한 Zend_Acl/_Auth 제안을 따르겠습니다.그러나 모든 프레임워크에는 비슷한 구성 요소가 함께 제공된다는 점을 명심하세요.
또 생각나는 것은 라이브사용자.나는 그것으로 작업하는 것도 아주 좋아합니다.
나는 당신이 거의 모든 것을 할 수 있다고 생각하며 접근 방식은 매우 단순해 보이지만 (모든 if()를 통해) 응용 프로그램 중간에 많은 ACL 논리를 배치하게 되므로 제한적이기도 합니다.단순하고 확장 가능하게 유지하기 위해 할 수 있는 가장 좋은 일은 아닙니다.;)