2013-05-19 3 views
0

현재 작업하고있는 클라이언트에 대한 솔루션이 있습니다. NET MVC 4 다음이 포함 된 면도날;2 MVC 4의 SimpleMembership 인스턴스 4 면도기 솔루션

  1. 클라이언트 로그인 영역이있는 공용 웹 사이트.
  2. 회사를 운영하기위한 개인 회사 webapp. 이것은 웹 사이트 서비스 영역이 아닙니다.
  3. 이들은 별도의 앱입니다. 회사 앱은 하위 도메인으로 실행됩니다.
  4. 둘 다 동일한 SQL 데이터베이스에서 실행됩니다.

문제가 있습니다. 각 응용 프로그램마다 하나씩 SimpleMembership의 개별 인스턴스로 끝납니다. 그러나 두 세트의 webpages_ Tables와 함께 역할 등을 위해 SimpleMembership으로 생성됩니다.이 테이블의 이름을 변경할 수 없다는 것을 알고 있습니다. 내가 User와 adminusers 할 수 있도록 나는 문제없이 User 테이블 이름을 바꿀 수있다. 나는 기존의 자체 로그인 모델을 대안으로 생각했다. 내가 원하는 것을하기위한 제안이나 기사?

+0

글쎄, 일부 파고 후에 테이블 이름이 코드에서 고정되어 있음을 발견했습니다. 소스 코드를 사용할 수 있으며 새 버전으로 mod하고 다시 컴파일 할 수 있습니다. 어쩌면 그렇게 할 시간이있을 때 나는 할 것입니다. 누구나 잠시 동안 제안이 있습니까? – glerler

답변

0
당신은 기본 webpages_ 접두사를 변경하거나 테이블에 앉아 (AFAIK) 데이터베이스 스키마 할 수 없기 때문에,이 문제를 해결해야 할 것입니다.

단순 멤버 자격 공급자가 될 수 있도록 설계되었다

고도의 사용자 정의가 가능하지만 상자에서 꺼내 사용하면 자신의 공급자를 사용하는 것보다 많은 작업을 줄일 수 있습니다. 그러므로 더 나은 옵션은 그것을 사용하는 방법을 찾는 것이라고 가정 해 봅시다. 솔루션은 다음 중 하나입니다.

  • 두 개의 데이터베이스; 또는
  • 하나의 데이터베이스 만 사용하는 경우 역할을 사용하여 사용자를 분리 할 수 ​​있습니다.

역할을 사용할 때의 작은 단점은 UserProfile 클래스에서 조금 더 열심히해야한다는 것입니다. 일반적으로이 클래스에 사용자 속성을 추가합니다. 두 사이트가 다른 사용자 속성을 사용하는 경우 Shared Primary Key Associations과 같은 것을 사용하여 테이블을 가로로 분할해야합니다.

제 견해로 이것은 분리 된 데이터베이스에서 두 개의 분리 된 세트를 유지하는 것보다 실제로 작동하지 않을 것입니다. 또는 동일한 데이터베이스에서도 마찬가지입니다. 어쨌든 "LastLoginAt"와 같은 공유 속성은 UserProfile에 포함될 수 있으므로 (따라서 두 사이트 모두에 공통 라이브러리를 개발할 수 있음) "InternalExtensionNumber"와 같은 사이트 별 속성은 회사 사용자 별 파티션 테이블로 이동할 수 있습니다.

단점이란? 누군가가 사용자 역할 테이블에 액세스하면 개인 사용자에게 개인 사이트 액세스 권한을 할당 할 수 있습니다. 즉, 누군가가 사용자 역할 표에서 해당 작업을 수행하기 위해 액세스 권한을 얻는다면 이미 손상되었을 가능성이 있으며 더 나빠질 수는 없습니다.

예 :

사이트 1에 등록하는 모든 사용자는 역할 "PublicUser"및 사이트 2가 다음에 시행하는 것이 어렵지 않을 것 역할 "관리 사용자"를 주어로 등록하는 모든 사용자를 지정하면 당신이 회사의 응용 프로그램에있는 모든 컨트롤러가 필요한 권한을 장식 할 수 예를 들어 특정 사이트 내에서 필수 역할 :

[Authorize(Roles = "PrivateUser")] 

또는 사이트의 역할에 대한 사이트 전체에 권한을 적용 할 수 있습니다. 당신이 당신의 자신을 만들고 그것을 사용하여 권한 부여 속성을 확장 할 수 당신이 원하는 경우,이보다 더 갈

// Add this to global.asax.cs to enforce authorization on all controllers. 
public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    // Add a setting to the web.config to specify the site role, 
    // and then you can use the same value consistently when 
    // registering users and assigning them a role. 
    string siteRole = System.Configuration.ConfigurationManager.AppSettings["SiteRole"]; 
    filters.Add(new System.Web.Mvc.AuthorizeAttribute() { Roles = siteRole }); 
} 

이렇게하려면 공용 메소드에 액세스 할 수 있도록하기 위해 AllowAnonymousAttribute를 사용하여 다음 AuthorizeAttribute 사용 register the attribute as a site filter, 수 사이트 또는 컨트롤러 수준에서 적절하게 조정할 수 있습니다.

+0

제안 해 주셔서 감사합니다. 이것은 저에게 생각할 것을 제공합니다. 내 시나리오에서는 각 사이트마다 다른 역할 세트가 필요합니다. 이것이 내가 각 사이트에 대한 사용자의 데이터가 다르다는 상황에서 끝난 방법입니다. 내가 끝내는 것을 너에게 알려주지. Thx – glerler

+0

@glerler. 동일한 테이블에 두 가지 역할 세트를 유지할 수 있지만 "개인 회사"사이트가 더 안전한 네트워크 영역에 있어야하고 공개 사이트가 dmz에 있어야합니다. 그렇지 않다면 단일 데이터베이스의 유지 관리 및 백업과는 달리 별도의 ID 데이터베이스를 갖는 작업이 필요합니다. 그렇다면 (내 선호도가 될 것입니다) 사이트와 데이터베이스를 분리해야합니다 (정의에 따라 사설 사이트는 잠재적으로 더 민감한 데이터를 가지고있어 링킹해야합니다). –

관련 문제