카운트 기반 액세스 제어 설계에 대한 조언을 받고 싶습니다. 예를 들어, 고객이 자신의 계정을 기반으로 시스템에서 작성할 수있는 사용자 수를 제한하려고합니다. 따라서 기본적으로 고객은 2 명의 사용자를 만들 수 있지만 계정을 업그레이드하면 5 명의 사용자를 생성하는 등의 효과가 있습니다. 비슷한 기준으로 제한해야하는 몇 가지 기능이 추가로 있습니다.카운트 기반 액세스 제어 설계
응용 프로그램은 일반 모델을 따르므로 노출 된 모든 기능에는 뒷면 테이블이 있으며 해당 테이블에 대한 CRUD 작업을 처리하는 클래스가 있습니다. 또한 응용 프로그램은 여러 노드에서 실행되며 분산 캐시가 있습니다.
구현 방법은 다음과 같습니다. - 제어 할 기능과 허용 된 한도 (고객 당 저장)를 캡처하는 새 테이블이 있습니다. - 모든 테이블에 대해 create 메소드를 가로 채고 해당 테이블에 액세스 제어가 적용되어야하는지 확인합니다. 그렇다면 생성 된 엔티티의 개수를 가져 와서 제한과 비교하여 생성을 허용할지 여부를 결정하십시오. - 동시 요청의 경우 동기화를 처리하기 위해 데이터베이스를 사용하고 있습니다. 그래서 만드는 방법은 호출 된 후 내가 사용하여 테이블을 업데이트 다음 where 절
곳 (count_column + 1) = # countInMemory #
. 즉, 갱신은 DB + 1에 저장된 값 = 메모리 내의 값일 경우에만 성공할 것이다. 이렇게하면 두 스레드가 동시에 작성을 시도하더라도 하나만 성공적으로 갱신 할 수 있습니다. 성공적으로 업데이트 된 스레드와 다른 스레드는 롤백됩니다. 이렇게하면 응용 프로그램의 모든 코드를 동기화 할 필요가 없습니다.
이 작업을 수행하는 다른/더 좋은 방법이 있는지 알고 싶습니다. 내 응용 프로그램은 Oracle 및 MySQL DB에서 실행됩니다.
도움 주셔서 감사합니다.
코드를 단순화하기 위해 다시 시도하지 않습니다. 오히려 예외를 던지십시오, 당신의 요점은 유효한 것입니다. 또한 설명하는 시나리오가 없기 때문에 사용자는 고객의 평생 동안 고객과 연결됩니다. 마지막으로 행당 수를 저장하면 제한을 쉽게 무시할 수 있습니다. – Raam