MVC 4 웹 애플리케이션이 있으며 현재 3 명의 사용자와 2 개의 역할을 가진 간단한 멤버십을 사용하고 있습니다.C#에서 여러 회사의 동일한 사용자 이름을 가진 사용자를 만들 수 있도록 간단한 멤버 자격 공급자를 사용자 정의하십시오. .net MVC 4 애플리케이션
[Table("UserProfile")]
public partial class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public int CompanyId { get; set; }
}
내가 다른 회사에 같은 이름을 가진 사용자를 생성 할 수 있습니다 회원을 구현해야하지만, websecurity.CreateUserAndAccount 방법은 복제 사용자 이름을 허용 does't : 내 사용자 테이블은 다음과 같다. 당장은 다음과 같은 ValidateUsers 메서드를 구현했습니다.
public class ExtendedSimpleMembershipProvider
{
private static IMyProjectRepository myProjectRepository = new MyProjectRepository(new MyProjectEntities());
public static bool ValidateUser(string username, string password, string companyName)
{
int companyId = myProjectRepository.GetCompanyIdByName(companyName);
int? userId = companyId == 0 ? null : GetUserId(username, companyId);
if (userId.HasValue && userId.Value != 0)
return WebSecurity.Login(username, password);
else
return false;
}
private static int? GetUserId(string username, int companyId)
{
var userId = (from users
in myProjectRepository.GetUserProfiles()
where (users.UserName.ToLower() == username.ToLower()) && (users.CompanyId == companyId)
select users.UserId).FirstOrDefault();
return userId;
}
}
유효성이있는 사용자가 올바르게 작동합니다. WebSecurity.CreateUsersAndAccount
을 확장하여 다른 회사의 동일한 사용자 이름을 가진 사용자를 만들 수도 있고 자신의 멤버십을 구현하지 않고 단순한 멤버십 확장만으로 불가능할 수도 있습니다. 나는 다음과 같은 것을 생각하고 있었다. 데이터베이스의 userProfile에서만 사용자를 생성 한 다음 userProfile 테이블에서 이미 생성 된 userId를 가진 멤버십 테이블에 사용자를 추가한다. UserProfile 테이블에서 UserId 만 고유하고 키이므로이 작업이 필요합니다.
public override static string CreateUserAndAccount(string userName, string password, object propertyValues = null, bool requireConfirmationToken = false)
{
if(string != null && password && null && propertyValues.CompanyId != null)
{
UserProfile user = new UserProfile();
user.Name = userName;
user.CompanyId = propertyValues.CompanyId;
context.UserProfile.Add(user);
context.SaveChanges();
}
// here create new record in the membership table
}
이렇게하는 방법입니까? 아니면 다른 접근 방식을 취해야합니다.
웹 응용 프로그램 내에서 사용할 때이 연결된 사용자 이름에 어떻게 대처합니까? 매번 @ 또는 @ 전에 문자열을 구문 분석 하시겠습니까? 나는 이것에 대해 생각 해왔다. 그러나 그것은 미래의 많은 합병증처럼 보였다. – dlght
@dlght : 잠시 후, 우리는 그냥 가서 보여줍니다. 우리는 사용자의 전자 메일 주소와 대다수의 시간이 지나치게 많이 사용되기를 기대합니다. 그러나 사용자가 혼란 스러우면 "실제"사용자 이름 개념과 "표시 가능한"사용자 이름을 구분할 수 있습니다. DRY, SOLID 코드를 작성하는 한 어렵지 않습니다. 그러나 그것은 단지 한 가지 방법 일 뿐이며, 다른 방법이 더 효과적이라고 느낀다면 그것을 찾으십시오. – StriplingWarrior