사용자가 액세스 할 수있는 모든 리소스 목록을 검색하는 권장 방법은 무엇입니까?인증 서비스 - 인증 된 리소스 목록 반환
필자가 보아온 많은 예에서 인증은 개별 서비스에 배치됩니다. 개별 서비스에 사용할 수있는 isAuthorized()와 유사한 메소드를 제공하는 인증이 종종 있습니다 ("사용자가 리소스 ABC ? ") 및 대량 쿼리 ("사용자는 다음 리소스 목록 중 하나를 사용할 수 있습니까? "). 인증 로직가 인증 서비스에 존재하는 동안
는 집행 권한 부여 정책의은 응용 프로그램 자체 (내 유지 예를 들어, 실제로 결과에 따라, 리소스에 대한 액세스를 구현하기위한 비즈니스 로직 계층 권한 부여 서비스의 결과에 따라 개별 옵션을 표시/숨기기위한 표현 계층).
예를 들어, 내 데이터 액세스 레이어가 잠재적으로 수십억 개의 "리소스"를 반환 할 수있는 경우이를 선호하는 방법은 무엇입니까? 비즈니스 로직 계층은 모든 데이터를 쿼리 (네트워크를 통해 모든 데이터 전달) 한 다음 거대한 목록을 권한 부여 서비스 (네트워크를 통해 다시 전달)를 통해 "허용/거부"목록의 거대한 목록 만 가져옵니다. 비즈니스 논리로 되돌려 보내겠습니까? 분명히 그 말이 맞지 않을 것입니다.
데이터 액세스, 인증 논리 및 비즈니스 논리를 "깨끗하게"구분할 수없는 경우입니까? 대신 사용자가 액세스 할 수있는 모든 리소스의 목록 만 나에게 반환하도록 데이터 액세스 계층에 요청해야합니다.이 리소스는 단순한 데이터베이스 조인으로 구현 될 수 있지만 누가 데이터를 액세스 할 수 있는지를 결정하는 논리를 필요로합니다 (예 : 인증 정책)이 데이터 액세스 코드에 내장되어있는 어떤 리소스에 대한 액세스 권한을 가지므로 해당 정책이 내 코드 기반으로 확산됩니다 (예 : 일부 인증 논리가 내 데이터 액세스 레이어, 일부는 내 권한 부여 레이어에 있을까요?)?
성능이 "깨끗한"아키텍처보다 우수 할 수도 있지만 더 좋은 방법 일 수 있습니까?
내가 작업하고있는 대규모 레거시 앱을 사용하는 비슷한 수수께끼에 직면하고 있습니다. "큰 결과 세트"시나리오는 까다롭기 때문에 sJhonny가 암시하는 것과 같이 문제가 아닌 것으로 생각합니다. ** 모든 ** 레코드의 결과 세트가 좋은 디자인은 아니지만 레코드 수 또는 페이지 수 (그리고 좋은 디자인 *) *를 제공하려는 경우에도 여전히 문제가 발생합니다. 데이터 계층이 다른 기술 (예 : SQL 저장 프로 시저)을 기반으로 구현되는 경우 더욱 어려워집니다. 승인 로직을 복제하는 것에 동의하더라도 다른 언어로되어 있습니다! – Snixtor