আপনি এমন একটি ব্যবহারকারীর ক্লাস তৈরি করতে পারেন যা আপনার মূল লাইব্রেরিতে এএসপি.নেট পরিচয়ের সাথে কিছুই করার নেই।
public class User {
public Guid UserId { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
public string EmailAddressConfirmed { get; set; }
public string PhoneNumber { get; set; }
public string PhoneNumberConfirmed { get; set; }
public string PasswordHash { get; set; }
public string SecurityStamp { get; set; }
...
public virtual ICollection<Role> Roles { get; set; }
public virtual ICollection<UserClaim> UserClaims { get; set; }
public virtual ICollection<UserLogin> UserLogins { get; set; }
}
আপনি যদি সত্ত্বা ফ্রেমওয়ার্ক ব্যবহার করছেন তবে আপনার সত্তার জন্য একটি কনফিগারেশন ক্লাস তৈরি করুন (alচ্ছিক)।
internal class UserConfiguration : EntityTypeConfiguration<User>
{
internal UserConfiguration()
{
ToTable("User");
HasKey(x => x.UserId)
.Property(x => x.UserId)
.HasColumnName("UserId")
.HasColumnType("uniqueidentifier")
.IsRequired();
Property(x => x.PasswordHash)
.HasColumnName("PasswordHash")
.HasColumnType("nvarchar")
.IsMaxLength()
.IsOptional();
Property(x => x.SecurityStamp)
.HasColumnName("SecurityStamp")
.HasColumnType("nvarchar")
.IsMaxLength()
.IsOptional();
Property(x => x.UserName)
.HasColumnName("UserName")
.HasColumnType("nvarchar")
.HasMaxLength(256)
.IsRequired();
// EmailAddress, PhoneNumber, ...
HasMany(x => x.Roles)
.WithMany(x => x.Users)
.Map(x =>
{
x.ToTable("UserRole");
x.MapLeftKey("UserId");
x.MapRightKey("RoleId");
});
HasMany(x => x.UserClaims)
.WithRequired(x => x.User)
.HasForeignKey(x => x.UserId);
HasMany(x => x.UserLogins)
.WithRequired(x => x.User)
.HasForeignKey(x => x.UserId);
}
}
আপনাকে রোল, ইউজারক্লেইম এবং ইউজারলগিনের জন্যও ক্লাস তৈরি করতে হবে । আপনি যদি উপরের নামগুলি পছন্দ না করেন তবে আপনি তাদের নাম চয়ন করতে পারেন।
ওয়েব স্তরে, অ্যাপ্লুউজার নামে একটি শ্রেণি তৈরি করুন (বা যদি আপনি অন্য কোনও নাম চয়ন করেন)। এই শ্রেণীর ASP.NET পরিচয়পত্র বাস্তবায়ন করা উচিত IUser <TKey> ইন্টারফেস, যেখানে TKey (প্রাথমিক কী-এর জন্য ডাটা টাইপ হল GUID উপরোক্ত উদাহরণের)।
public class AppUser : IUser<Guid>
{
public AppUser()
{
this.Id = Guid.NewGuid();
}
public AppUser(string userName)
: this()
{
this.UserName = userName;
}
public Guid Id { get; set; }
public string UserName { get; set; }
public string EmailAddress { get; set; }
public string EmailAddressConfirmed { get; set; }
public string PhoneNumber { get; set; }
public string PhoneNumberConfirmed { get; set; }
public string PasswordHash { get; set; }
public string SecurityStamp { get; set; }
}
ওয়েব প্রকল্পের ইউজারম্যানেজারের সমস্ত উল্লেখ ইউজারম্যানেজার <অ্যাপ ইউজার, গাইড> এ পরিবর্তন করুন ।
অবশেষে, আপনার নিজস্ব ইউজার স্টোর তৈরি করুন । মূলত, কাস্টম ইউজার স্টোরটি অ্যাপস ব্যবহারকারীর অবজেক্টে নেবে , এটি কোনও ব্যবহারকারীর সত্তা অবজেক্টে রূপান্তরিত করবে , তারপরে এটি অবিচল থাকবে। এর মধ্যে একটি পদ্ধতির উদাহরণ নীচে দেখানো হয়েছে:
public class UserStore :
IUserLoginStore<AppUser, Guid>,
IUserClaimStore<AppUser, Guid>,
IUserRoleStore<AppUser, Guid>,
IUserPasswordStore<AppUser, Guid>,
IUserSecurityStampStore<AppUser, Guid>,
IUserStore<AppUser, Guid>,
IDisposable
{
private User MapFromAppUser(AppUser appUser)
{
if (appUser == null)
return null;
var userEntity = new User();
PopulateUser(userEntity, appUser);
return userEntity;
}
private void PopulateUser(User user, AppUser appUser)
{
user.UserId = appUser.Id;
user.UserName = appUser.UserName;
user.EmailAddress = appUser.EmailAddress;
user.EmailAddressConfirmed = appUser.EmailAddressConfirmed;
user.PhoneNumber = appUser.PhoneNumber;
user.PhoneNumberConfirmed = appUser.PhoneNumberConfirmed;
user.PasswordHash = appUser.PasswordHash;
user.SecurityStamp = appUser.SecurityStamp;
// First name, last name, ...
}
#region IUserStore<AppUser, Guid> Members
public Task CreateAsync(AppUser appUser)
{
if (appUser == null)
throw new ArgumentNullException("appUser");
var userEntity = MapFromAppUser(appUser);
// Persist the user entity to database using a data repository.
// I'll leave this to you.
}
...
#endregion
}
সম্ভাব্য বাস্তবায়নের সম্পূর্ণ বিবরণ পেতে, এখানে ক্লিক করুন ।
শেষ পর্যন্ত, এটি আপনার পছন্দ। আপনার কোর লাইব্রেরিতে সনাক্তকরণের কাঠামোটি কেবলমাত্র উল্লেখ করে বনাম এই বাস্তবায়নটি বজায় রাখতে আপনার যে পরিমাণ পরিশ্রম লাগবে তা পরিমাপ করুন। ব্যক্তিগতভাবে, আমি এটি আমার উপরে বর্ণিত পদ্ধতিতে করার চিন্তাভাবনা করেছি, তবে আমি তা করি নি কারণ এএসপি.নেট আইডেন্টিটি ফ্রেমওয়ার্কটি আপডেট হওয়ার পরে প্রতিবারই আমার কোডটি পরিবর্তন করতে হবে।
আশা করি এটি আপনার প্রশ্নের সহায়তা করে এবং উত্তর দেয়!