문제

저는 PHP 및 MySQL을 사용하여 웹 응용 프로그램을 만드는 팀의 일원입니다. 응용 프로그램에는 역할이 다른 여러 사용자가 있습니다. 응용 프로그램은 지리적으로 분산 된 방식으로 사용됩니다. 따라서 다음 두 가지 수준에서 작동하는 액세스 제어 시스템을 만들어야합니다.

  1. 특정 PHP 페이지에 대한 사용자 권한을 제어합니다. IE는 사용자의 역할에 따라 특정 페이지 (또는 사용자 인터페이스 요소)에 대한 액세스를 제공하거나 거부합니다. 예를 들어 : 사용자는 "학생"페이지에 액세스 할 수 있지만 "교사"페이지에는 액세스 할 수 없습니다.
  2. 특정 데이터베이스 레코드에 대한 사용자 권한을 제어합니다. 즉, 특정 레코드 만 표시되도록 데이터베이스 쿼리를 수정합니다. 예를 들어, 도시 수준의 사용자의 경우 사용자의 특정 도시와 관련된 레코드 만 표시되어야하며, 국가 차원의 사용자는 국가의 모든 도시에 대한 기록을 표시해야합니다.

이러한 유형의 액세스 제어를 모두 처리 할 수있는 시스템 설계에 도움이 필요합니다. 포인트 번호. 1은 충분히 단순한 것 같습니다. 그러나 SQL 쿼리의 정보를 하드 코딩하지 않고 포인트 2를 수행하는 방법에 대해 완전히 손실됩니다.

모든 도움이 감사하겠습니다.

미리 감사드립니다

Vinayak

도움이 되었습니까?

해결책

나는 몇 달 전에 비슷한 상황에 처해있었습니다. Zend_Acl과 같은 도구가 단일 항목에 대한 액세스 레벨을 확인하는 경우 (또는 합리적으로 적은 수) 작동한다는 것을 알았습니다. 사용자가 액세스 할 수있는 막대한 항목 목록을 가져와야 할 때 실패합니다. 이 문제를 사용하여 사용자 정의 솔루션을 제작했습니다 사업 대의원 무늬. BD는 특정 상황에서 적용 할 수있는 비즈니스 논리를 제공합니다. 이 시나리오에서는 SQL 로직이 전달되어 SubSelect에서 필터링 조건으로 사용되었습니다. 다음 다이어그램을 참조하십시오.

alt text
(원천: epsi.pl)

및 호출 순서를 설명하는 시퀀스 다이어그램 :

alt text
(원천: epsi.pl)

이 솔루션에 대해 블로그를 작성했습니다, 불행히도 모든 것이 폴란드 인이지만 코드와 다이어그램을 편리하게 찾을 수 있습니다. 내가 말할 수있는 것은 구현은 케이크 한 조각이 아니지만 성능면 목록의 각 요소에 대한 반복 액세스 점검과 비교할 때 챔피언입니다. 또한 위의 인프라는 목록의 한 가지 유형의 항목뿐만 아니라 처리합니다. 도시, 국가, 제품 또는 문서 목록이있는 한 다른 목록에 액세스 할 때 서비스를 제공 할 수 있습니다. IAuthorizable 상호 작용.

다른 팁

문제의 세부 사항에 대해 모르지만 Zend 프레임 워크는 다소 강력합니다. ACL 그리고 인증 보고 싶은 구성 요소 세트. 매우 정확한 액세스 제어, 지속성을위한 데이터 저장, 고급 조건 규칙과 같은 좋은 것.

당신이 필요로하는 것은 나에게 이것입니다 : (나는 국가/주/도시 예를 사용하겠습니다)

  1. 모든 국가의 목록. 각 "국가"에는 ID가 있습니다.
  2. 국가 내의 모든 주 목록. 각 상태는 Coutnry의 ID에 묶여 있지만 고유 한 ID도 있습니다.
  3. 모든 도시의 목록. 각 도시는 주 또는 국가에 직접 묶여 있으며 어느 것을 나타내는 깃발이 있습니다.

도시 사용자의 경우 분명히 신분증과 일치하는 도시와 관련된 기록을 검색하고 표시합니다. 그러나 주 또는 국가 차원의 경우 해당 국가 (또는 주 또는 귀하가있는)와 일치하는 신분증이있는 각 도시와 관련된 모든 기록을 검색하십시오.

따라서 기본적으로 각 하위 그룹은 위의 그룹에 의존하며, 올바르게 기억하지는 않지만 서브 쿼리를 사용하여 트릭을 수행 할 수 있다고 생각합니다.

이 작업을 수행하는 방법을 모른다면 Zend Framework, CakePHP 또는 Symphony와 같은 PHP 프레임 워크를 사용합니다. 그들은 당신을 위해 무거운 리프팅을했으며 이미 일부 유형의 액세스 제어 체계가 있습니다.

나는 빌드와 비슷한 솔루션을 가지고 있으며 지금까지 사양과 역할을 사용하기로 결정 했으므로 실제로 한 가지 역할에는 특권 사양이 첨부 될 것입니다. 모두 만족하면 허가가 부여됩니다. 그렇지 않으면 리소스 기본 액세스로 돌아갑니다.

나는 이미 솔루션을 구현하고있는 사람을 찾기 위해 살펴보고 있었지만 아무도하지 않은 것 같습니다. 그것이 실패하지 않기를 바랍니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top