2013-02-05 1 views
4

가능한 한 MVC 4와 함께 Simple Membership Provider를 "책"으로 사용하려고합니다. 현재 시나리오는 다음과 같습니다.단순 멤버 자격 공급자 - 엔터티 프레임 워크 및 역할

- 나는 here 주제의 Jon Galloway 블로그 게시물을 사용하고 있습니다.

1) 저는이 것이 Entity Framework를 통해 유선 상태임을 알고 있습니다. 그러나 UserProfile 클래스에 속성을 추가 할 때 속성이 생성 될 때 자동으로 테이블에 나타나지 않았습니다. 데이터베이스가 이미 생성 되었기 때문에 (테이블이 존재하지 않음)? 필자는 수동으로 필드를 추가했지만 기능적 이었지만 필드가 자동으로 생성되지 않도록하는 "잡았다"를 알면 좋을 것입니다.

2) 역할에 관한 한, 주로 전역 권한 유형 (즉, 사용자는 사용자, 관리자 등)을 대상으로합니다. 프로젝트 레벨 (예 : project1의 admin, project2의 user)에서 처리하도록하려면 어떤 수정이 필요합니까?

등) 확장 방법에 대한 모범 사례와 관련하여 실제로 자세히 설명하는 기사가 있습니까?

+0

이 주제에 대한 많은 게시물을 찾아야합니다. 예 : http://stackoverflow.com/questions/14672205/code-first-membership-provider/14672293#14672293 –

+0

정확히 무엇을하고 싶습니까? SimpleMembership을 사용하고 Db를 확장 하시겠습니까? –

+0

UserProfile 개체에는 UserId 및 UserName이 있습니다. 이메일, 이름 (성명) 및 IsLockedOut을 추가했습니다. 어떤 이유로 든 테이블을 생성 할 때 해당 속성은 데이터베이스에 필드를 만들지 않습니다. 필자는 수동으로 열을 작성하여 해결할 수있었습니다. 생성하지 않는 이유가있는 경우 (웹 보안 방법에 대한 소스를 이해할 수없는 경우) 호기심이 생겼습니다. 역할 테이블은 id와 role이지만 id, project, role로 전환하려고합니다. 현재는 역할 추가/확인 기능을 내장하고 수표를 작성하지 않고 규칙을 준수 할 필요가 있습니다. – Robert

답변

5

1) Simple Membership의 UserProfile 테이블 부분이 조금 복잡해 보이지만 (좋은 방법으로), 내 애플 리케이션을 위해 훌륭하게 작동했습니다.

단순 멤버쉽의 규칙은 UserId 및 UserName의 두 필드가있는 "UserProfile"이라는 UserProfile 테이블을 만드는 것입니다. Filters/InitializeSimpleMembershipAttribute.cs의 WebSecurity.InitializeDatabaseConnection() 줄을 수정하여 다른 테이블 이름이나 UserProfile에 대한 다른 UserId 및 UserName 필드 이름을 구성 할 수 있습니다. 추가 필드가있는 UserProfile 테이블을 생성 할 수 있으며 단순 멤버쉽이 처음 실행될 때 테이블을 찾으면 단순 멤버쉽에서 사용됩니다. 기본 구성에서, 앱이 처음 실행될 때 SimpleMembership은 Filters/InitializeSimpleMembershipAttribute.cs에 지정된 UserProfile 테이블 세부 정보를 포함하여 데이터베이스 테이블을 생성합니다.

그래서, 간단한 멤버쉽에 대한 첫 번째 호출 전에 원하는 UserProfile 테이블 (해당 테이블에 원하는 모든 필드 포함)을 만드는 것이 트릭입니다. EF 마이그레이션으로 만들거나 데이터베이스 스크립트로 만들거나 SSMS에서 수동으로 만들 수도 있습니다.

Simple Membership 코드를 파헤 치려면 http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/WebSecurity.cshttp://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/SimpleMembershipProvider.cs을 참조하십시오.

2) 나는 역할 및 전역 권한에 대한 귀하의 요점에 동의합니다. 사용하는 프로젝트에 따라 로그인 할 때 AddUsersToRoles 및 RemoveUsersFromRoles (http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/5cb74eb3b2f3#src/WebMatrix.WebData/SimpleRoleProvider.cs)를 사용하여 사용자의 역할을 수정할 수 있습니다.

등) Simple Membership을 확장하는 것에 대해서는 잘 모르겠지만 원칙적으로 Simple Membership은 ASP.NET Membership Provider를 확장하는 Extended Membership Provider를 확장합니다. 적절한 시점에 뛰어들 수 있어야합니다. 로버트의 코멘트에 응답

편집 : USERPROFILE 테이블이 이미 응용 프로그램 전에 SimpeMembership 초기화에 의해 생성 될 때 엔티티 프레임 워크는 사용자 프로필 클래스에 추가 열을 생성하지 않은 이유에 대해 직접적인 답변으로

이 발생 특정 테이블 생성이 실행되었습니다. 그 이유는 SimpleMembership이 SimpleMembership이 해당 테이블을 생성 할 때 사용되는 UserProfile 테이블의 내장 된 정의를 가지고 있기 때문입니다. UserProfile 테이블 생성의 타이밍은 중요하므로 SimpleMembership 초기화가 실행되기 전에 응용 프로그램 별 테이블이 생성되었는지 확인해야합니다.

+1

나는이 질문에 만족스럽게 대답한다고 생각한다. 일반적으로 엔티티 프레임 워크가 내 열을 생성하지 않는 이유는 무엇입니까? – Robert