2012-12-19 3 views
2

비트 단위 액세스 제어 목록이 안티 패턴으로 간주됩니까? 내가 일하고있는 응용 프로그램에서 이것을 볼 수 있기 때문에 궁금하네요. 그리고 우스운 것처럼 보일지라도 일종의 공감대가 있습니다. 필자가 볼 수있는 단점은 "편집자"또는 "관리자"를보기가 더 쉽다는 것이 무엇인지를 아는 것이 어렵다는 것입니다. 그러나 bitwise 접근법은 기술적 인 수준에서 작동하는 것처럼 보입니다.비트 단위 액세스 제어 목록이 안티 패턴으로 간주됩니까?

+0

구체적인 구현 방법을 모으는 것처럼 보입니다. 하드 코딩 된 비트 위치 대신 명명 된 상수를 사용할 수없는 이유는 없습니다. 또한, 얼마나 많은 비트? 크기가 고정되어 있습니까? 아니면 무기한 성장할 수 있습니까? 응답에 대한 –

+0

주셔서 감사합니다. 배경 이야기는 전에이 접근 방식을 고려한 적이 없지만이를 구현하는 회사에서 일하고 있으며 그 접근 방식을 사용하여 얻은 이점이 무엇인지 알고 싶었습니다. 나에게 그것은 매우 모호하고 문서화하기 쉽지 않지만 나는 그것이 효과가 있다고 말했다. 나는 그것을 사용하는 것에 대해 논쟁하고 싶었지만 사람들이 이것을 많이 사용하는 것 같아서 새로운 것을 배울 것입니다. 예 아니오에 대한 enum 플래그 1,0이있는 DB의 열과 관련된 ACL을 선호합니다. –

답변

2

저장 공간을 절약 할 수 있으며 모든 곳에서 사용됩니다. 예를 들어 "편집자"와 "관리자"인 한 사람이있는 경우에 적합합니다. 그리고 권한 8이 무엇인지 기억할 필요가 없습니다. 한 번 정의한 번호를 참조하고 걱정할 필요가없는 이름을 사용해야합니다.

+0

답장을 보내 주셔서 감사합니다. 저는 ACL에서이 접근법이 얼마나 널리 퍼져 있는지 알지 못했습니다. 나는 깨달음을 느낀다. –

0

공식적인 합의가 있는지는 모르겠지만 일부 영리한 방법으로 문자열을 사용하지 않는다면 특정 숫자로 사용되는 비트 수에 제한이 있기 때문에 반 패턴으로 생각할 것입니다. 유형.

프로젝트의 범위를 잘 알면 32/64 이상을 가질 수 없습니다.

권한 값의 가독성은별로 중요하지 않습니다.

1

이 안티 패턴은 아니지만, 알아야 할 몇 가지 중요한 문제점 몇 개를 가지고 : 액세스 제어를위한 비트 필드를 사용

  • 이 불가능 효율적으로 특정 사용자가 액세스 할 수있는 개체를 나열 할 수 있습니다. (canRead = 1에 대한 검색은 SQL에서 색인화 할 수 있지만 permissions & 0x40 = 0x40은 불가능합니다.)
  • 정수로 제한된 비트 수가 있습니다. (부호 비트를 사용하는 것은 지저분하고 PHP는 32 비트 시스템에서 실행될 때 64 비트 정수를 갖지 않습니다.) 사실, 동적으로 할당 된 것에 대해서는 사용하지 마십시오. - 기본 제공 권한에 대해서만 사용하는 것이 가장 좋습니다.
  • 데이터베이스 콘솔에서 비트 마스크를 읽는 것이 훨씬 더 어렵습니다.

어쨌든 데이터베이스의 개별 TINYINT (또는 유사한) 플래그를 사용하면 훨씬 편리 할 것입니다. 값을 비트 필드에 저장하면 스토리지 비용을 절약 할 수 있습니다.

+0

posgresql은 열뿐만 아니라 모든 표현식에 대해 색인을 생성 할 수 있다고 생각합니다. –

+1

정확하지만 다소 어려움이 있습니다. 나는 당신이 필요로하는'X'의 각 값에 대해'permissions & X'를 따로 인덱스해야한다고 생각합니다; 'permissions'에 대한 하나의 인덱스가 도움이되지 않습니다. – duskwuff