2013-04-17 5 views
0

카운트 기반 액세스 제어 설계에 대한 조언을 받고 싶습니다. 예를 들어, 고객이 자신의 계정을 기반으로 시스템에서 작성할 수있는 사용자 수를 제한하려고합니다. 따라서 기본적으로 고객은 2 명의 사용자를 만들 수 있지만 계정을 업그레이드하면 5 명의 사용자를 생성하는 등의 효과가 있습니다. 비슷한 기준으로 제한해야하는 몇 가지 기능이 추가로 있습니다.카운트 기반 액세스 제어 설계

응용 프로그램은 일반 모델을 따르므로 노출 된 모든 기능에는 뒷면 테이블이 있으며 해당 테이블에 대한 CRUD 작업을 처리하는 클래스가 있습니다. 또한 응용 프로그램은 여러 노드에서 실행되며 분산 캐시가 있습니다.

구현 방법은 다음과 같습니다. - 제어 할 기능과 허용 된 한도 (고객 당 저장)를 캡처하는 새 테이블이 있습니다. - 모든 테이블에 대해 create 메소드를 가로 채고 해당 테이블에 액세스 제어가 적용되어야하는지 확인합니다. 그렇다면 생성 된 엔티티의 개수를 가져 와서 제한과 비교하여 생성을 허용할지 여부를 결정하십시오. - 동시 요청의 경우 동기화를 처리하기 위해 데이터베이스를 사용하고 있습니다. 그래서 만드는 방법은 호출 된 후 내가 사용하여 테이블을 업데이트 다음 where 절

곳 (count_column + 1) = # countInMemory #

. 즉, 갱신은 DB + 1에 저장된 값 = 메모리 내의 값일 경우에만 성공할 것이다. 이렇게하면 두 스레드가 동시에 작성을 시도하더라도 하나만 성공적으로 갱신 할 수 있습니다. 성공적으로 업데이트 된 스레드와 다른 스레드는 롤백됩니다. 이렇게하면 응용 프로그램의 모든 코드를 동기화 할 필요가 없습니다.

이 작업을 수행하는 다른/더 좋은 방법이 있는지 알고 싶습니다. 내 응용 프로그램은 Oracle 및 MySQL DB에서 실행됩니다.

도움 주셔서 감사합니다.

답변

0

롤백 할 때 새 사용자 수를 가져온 후 다시 시도 하시겠습니까? 아니면 실패합니까? 필자는 새로 가져온 사용자 수가 다른 사용자를 허용한다고 가정하면서 전자를 권장합니다.

저는 최근 비슷한 시스템을 다루었습니다. 고려해야 할 몇 가지 사항 : CustomerA가 사용자를 CustomerB로 이전 할 수있게 하시겠습니까? (이것은 고객이 독립적이지 않은 것으로 가정합니다. 예를 들어, 시스템에서는 CustomerA가 IT 관리자이고 CustomerB가 동일한 회사에서 근무하는 회계 관리자 일 수 있으며, CustomerA의 직원 중 한 명이 회계로 이동하면이를 CustomerB의 계정) 고객이 삭제되면 고객의 사용자는 어떻게됩니까? (우리의 경우 다른 고객/관리자가이를 채택 할 필요가 있거나 그렇지 않으면 삭제 될 것입니다.) 고객의 사용자 한도를 별도의 테이블에 저장하는 방법 (예 : 고객이 유형 "Level2"및 고객 유형 표는 "Level2"고객이 5 명의 사용자를 만들 수 있음) 또는 고객의 행 (오류가 발생하기 쉽지만 최대 사용자 수에 대해 고객 별 우선 적용을 허용 함) 또는 조합 (고객이 type 5 명의 사용자를 가질 수 있다고 알려주는 열 및 추가로 3 명의 사용자가있을 수 있다고 말하는 override 열)

하지만 그 부분이 중요합니다. DB 동기화가 정상입니다.

+0

코드를 단순화하기 위해 다시 시도하지 않습니다. 오히려 예외를 던지십시오, 당신의 요점은 유효한 것입니다. 또한 설명하는 시나리오가 없기 때문에 사용자는 고객의 평생 동안 고객과 연결됩니다. 마지막으로 행당 수를 저장하면 제한을 쉽게 무시할 수 있습니다. – Raam

관련 문제