이전에이 주제를 훑어 보았지만 아직 깔끔한 해결책을 찾지 못했습니다.동적 사용 권한 제약 조건을 코드화하고 저장하는 방법은 무엇입니까?
고객이 웹 사이트를 사용하여 코스를 예약 할 수있는 응용 프로그램이 있고 관리자 직원도 백엔드 시스템을 사용하여 고객을 대신하여 코스를 예약 할 수 있다고 가정 해보십시오. 권한이 부울이 아니며 응용 프로그램에 하드 코딩되어서는 안되기 때문에 HR 관리자가 can_make_booking
과 같은 사용 권한에 적용한 제약을 코드화 할 수있는 방법을 마련하려고합니다.
현재 고객은 코스 날짜가 적어도 표준 알림 일 'n'일 이후에 예약 할 수 있으며 이용 가능한 장소의 수를 초과하여 예약하지 않고 지불하고 있습니다. 만기 금액 (또는 계좌가 송장으로 설정된 경우에는 nil). 관리자는 예약 날짜가 지금부터 언제든지 백엔드 애플리케이션을 사용하여 예약 할 수 있습니다.
나는 이와 비슷한 것을 상상한다.
role permission constraint
-------- ------------ ----------
customer make_booking 1
customer make_booking 2
customer make_booking 3
manager make_booking 5
그런 제약의 테이블, 다음 eval
에드 코드 같은 것을 만들 것이다 고객 역할에 대한 이러한 제약을 체인으로 연결
constraint property operator value OR_parent
---------- ------------ -------- -------------------------- ---------
1 $course_date >= strtotime("+$notice days") NULL
2 $places_booked <= $places_available NULL
3 $paid >= $total NULL
4 $send_invoice == TRUE 3
5 $course_date >= strtotime("now") NULL
(제약 # 4 : HR 관리자는 다음과 같이 권한 제약 조건을 추가 할 수
if($course_date >= strtotime("+$notice days") && $places_booked <= $places_available && ($paid >= $total || $send_invoice == TRUE)){
// make the booking
}
각 규칙은 JavaScr 같이, 각각의 단계에서 개별적으로 사용될 수있다 :는 OR 서열의 일부)로서 # 3 짝 ipt 및 양식 유효성 확인을 통해 예약을 할 수없는 경우 피드백을 제공합니다.
그러나 고객이 한 번에 3 곳만 예약 할 수 있도록 고객이 규칙을 변경하고 $paid
금액은 적어도 $deposit
금액이어야합니다. 이상적으로, 나는 그들이 PHP 코드에 대한 액세스를 제공하지 않고 이러한 PHP 규칙을 동적으로 빌드 할 수있게하고 싶습니다. 속성과 값은 eval
코드가 문제가되지 않도록 위생 처리 될 수 있습니다. 어떤 경우에는 각 규칙의 모든 조합을 하드 코딩하지 않으려 고합니다. HR 관리자의 논리를 미리 추측 할 수있는 명확한 방법이 없을 것입니다.
저는 Zend_ACL 버전 assertions을 보았습니다. 그러나 나는 그들이 찾고있는 역 동성을 제공하지 않는 것 같습니다. 이러한 동적 제약 조건을 구현하는 좋은 방법은 무엇입니까? 다른 환경에서 온 생각들? 감사!
데이빗 쇼에 의한 CUSEC 프리젠 테이션에서이 문제 "ACL이 죽었다"왜 얘기에 좀 더 통찰력 - http://vimeo.com/2723800
귀하의 의견에 1을 더한 것은 다른 솔루션을 반영한 것으로 입증되었습니다. 감사 – boatingcow