2017-12-28 3 views
1

내 응용 프로그램은 .NET Framework 4.7 Web Api (Entity Framework 6 포함)입니다.멀티 테넌트 .net 프로젝트에서 역할을 구현하는 가장 좋은 방법은 무엇입니까?

이것은 제작중인 서비스 도구로서의 소프트웨어 용입니다. 내 응용 프로그램에는 AspNetUser와 Company 사이에 많은 관계가 있습니다.

사용자는 많은 회사를 가질 수 있으며 회사는 많은 사용자를 가질 수 있습니다. 사용자는 함께 작업하려는 회사를 기준으로 다른 역할/권한 집합을 가져야합니다. 이와 같은 것을 구현하는 가장 좋은 방법은 무엇입니까?

AspNetUserRoles 테이블에 CompanyId 열을 추가하는 것에 대해 생각해 보았습니다. 따라서 사용자는 관련된 다른 회사에 대해 다른 역할을 수행하게됩니다. 이것이 아주 좋은 구현인지 확신 할 수 없으며 인증 작업 방법을 깨뜨릴 수 있으므로 어떤 방식으로 작동하는지 명확하게 이해할 때까지는 터치하지 않으려 고합니다.

지금까지 멀티 테넌트 응용 프로그램에 대한 리소스 기반 인증에서 this guide을 발견했습니다. 그것은 내가 찾고있는 것으로 보이지만 그것은 .NET Core 용이며 .NET 4.7에서 작동하는지 잘 모르겠습니다.

.NET 4.7과 비슷한 것을 찾을 수 없어서 스택 오버플로 커뮤니티에 문의하고 있습니다.

+0

선택한 구현에서 발생한 모든 문제에 대해 질문의 범위를 좁히는 것이 좋습니다. –

+0

@NoRefundsNoReturns 선택한 구현이 없으므로 어떤 구현이 앞으로 나아갈 수 있는지 묻습니다. 나는 출발점에서 길을 잃었다. – Suren

+0

조언 : 사용자와 회사가 다 대다가 되려면 실제로 재평가해야합니다. 피할 수 있으면 각 회사 (임차인)가 사용자를 소유하고 사용자가 여러 회사와 연결될 필요가있는 다중 소유라는 일반적인 패턴에 빠지면 훨씬 쉽습니다. 사용자가 회사 (임차인)간에 사용자를 공유하도록 허용해야하는 경우 사용자와 회사 (CompanyUser 엔터티) 간의 다 대다 관계를 지원하기 위해 Identity Framework의 대부분을 재정의하고 다시 작성한 다음 CompanyUser와 역할 (CompanyUserRole 엔티티). – chambo

답변

0

처음부터 다시 빌드하는 경우 ASP.NET 코어로 전환하고 리소스 기반 권한 부여를 활용하는 것이 좋습니다.

세입자간에 데이터베이스 공유를 재검토하는 것이 좋습니다. SaaS 애플리케이션을위한 좋은 아이디어는 아닙니다. 돈을 절약 할 필요가 없다면 코드에 복잡성을 추가 할 의향이 있습니다. Multi-tenant SaaS database tenancy patterns을 읽을 수 있습니다.

당신이 가지고있는 것을 고수하고 싶다면 AspNetUser and Company와의 관계를 가질 수있는 새로운 클래스 Employee를 소개하는 것이 좋습니다. 이것이 여러 회사에 단합 할 수있는 단일 사용자를 관리하는 방법이지만 다른 측면에서는 회사 직원 만 수집 할 것입니다.

역할에 따라 User-Employee-Company 관계와 비슷한 작업을 수행 할 수 있습니다. 사용자 역할은 애플리케이션 소유자 (사용자)가 관리해야하므로 컨트롤러 및 작업에 대한 권한 부여 속성을 설정하기 때문에 CompanyRole 클래스에 정의한 역할 만 회사 관리자가 선택할 수 있습니다. 회사는 많은 AspNetUSerRole을 가진 많은 CompanyRole을 가질 수 있습니다.

예 : 역할을 설정

최고 관리자 [응용 프로그램 및 데이터에 절대 제어 할 수있는 사람 (아마도 어쩌면 당신의 동료 노동자의 일부), CompanyAdmin [이 회사를 통해 절대 제어 할 수있는 사람 (아마 당신의 앱에서 회사를 만든 사람), EmployeeAdmin [회사 내의 직원을 관리 할 수있는 권한을 가진 사람] (아마 회사의 HR 부서 직원), EmployeeReader [직원의 읽기 전용 직원에게 액세스 권한을 부여한 사람 회사] (아마 다른 직원에 대한 정보를 읽을 수있는 사람은 누구나) 등이 있습니다. 귀하의 요구 사항과 허가 권한이 얼마나 세밀하고 원하는지에 따라 다릅니다.

다음으로 CompanyAdmin이 CompanyRole 항목을 자신의 회사와 긴밀한 관계로 만들도록합니다. 예를 들어 CompanyRole은 HumanResourcesAdmin이고 EmployeeAdmin 역할과 관계가 있습니다.

다음으로 CompanyAdmin은 새 Employee를 만들고이 직원이 CompanyRoles를 가지고 있다고 말합니다. Employee를 계정과 페어링해야합니다 (존재하지 않는 경우 등록해야합니다).직원이 생성 된 후 이메일을 통해 초대 링크를 보내거나 CompanyAdmin이 버튼을 클릭하여 사용자를 초대 할 수 있습니다.

다음으로 사용자 등록/로그인 후에는 로그인하려는 회사를 관리해야하며 사용자는 자신의 신원에 올바른 역할을 쉽게 추가 할 수 있습니다.

분명합니까?

관련 문제