‫۵ سال و ۲ ماه قبل، پنجشنبه ۶ تیر ۱۳۹۸، ساعت ۱۸:۰۱
نکته تکمیلی
افزودن اطلاعات اضافی به لیست Claimهای کاربر جاری پس از موفقیت آمیز بودن اعتبارسنجی توکن ارسالی:
OnTokenValidated = async ctx =>
{
    string oid = ctx.Principal.FindFirstValue("http://schemas.microsoft.com/identity/claims/objectidentifier");

    //Get EF context
    var db = ctx.HttpContext.RequestServices.GetRequiredService<AuthorizationDbContext>();

    //Check is user a super admin
    bool isSuperAdmin = await db.SuperAdmins.AnyAsync(a => a.ObjectId == oid);
    if (isSuperAdmin)
    {
        //Add claim if they are
        var claims = new List<Claim>
        {
            new Claim(ClaimTypes.Role, "superadmin")
        };
        var appIdentity = new ClaimsIdentity(claims);

        ctx.Principal.AddIdentity(appIdentity);
    }
}
All the existing claims will still be there after this. We are only adding new claims

پیاده سازی ارائه شده، برگرفته است از مطلب «اعتبارسنجی مبتنی بر JWT در ASP.NET Core 2.0 بدون استفاده از سیستم Identity»

همچنین لطفا در قسمت مرتبط، بازخوردهای خود را ثبت نمائید.
جهت اطلاع
با طراحی مجدد و بازسازی آن، محدودیت ارث‌بری از DbContextCore موجود رفع شده است. طی چند روز آینده، نسخه جدید آن با مستندات مرتبط منتشر خواهد شد.
بله این ایراد وارد است؛ فرصت تهیه آزمون‌های واحد و مستندات کامل و به روز رسانی مداوم آن را نداشته‌ام. تا زمان آماده شدن آنها، پیشنهاد می‌کنم از پروژه‌های TestAPI و TestWebApp موجود در مخزن پروژه کمک بگیرید.

‫۵ سال و ۳ ماه قبل، سه‌شنبه ۱۴ خرداد ۱۳۹۸، ساعت ۱۸:۳۸
جهت اطلاع

ادامه مطلب جاری در سری مطالب مرتبط با زیرساخت DNTFrameworkCore، پوشش داده شد.
‫۵ سال و ۳ ماه قبل، یکشنبه ۱۲ خرداد ۱۳۹۸، ساعت ۱۷:۲۷
- مسیرهای آموزشی «ASP.NET Core» و «شروع به کار با EF Core 1.0»
- بعد از انتشار «قسمت ۶» به عنوان آخرین قسمت مرتبط با تفکر مبتنی‌بر CRUD، به مباحث مرتبط با Rich Domain Model و Application Layer مبتنی‌بر CQRS پرداخته خواهد شد.
‫۵ سال و ۳ ماه قبل، جمعه ۱۰ خرداد ۱۳۹۸، ساعت ۱۶:۵۵
برای انتقال این منابع به یک بانک اطلاعاتی، نیاز است مهیا کننده مرتبط با آن را طراحی و پیاده‌سازی کنید. به عنوان مثال کتابخانه Localization.SqlLocalizer به عنوان یک راه‌حل می‌تواند مورد استفاده قرار گیرد. 
جهت اطلاع
در نسخه جدید امضای متد MapToEntity به شکل زیر تغییر کرده است:
protected abstract void MapToEntity(TModel model, TEntity entity);
بدین ترتیب امکان دسترسی به مقادیر اصلی خصوصیات entity وجود خواهد داشت و می‌توان بخش پایانی مطلب جاری را به شکل زیر بازسازی کرد:
protected override void MapToEntity(UserModel model, User user)
{
    _mapper.Map(model, user);
    
    ApplySerialNumber(user, model);
    ApplyPasswordHash(user, model);
}

private void ApplySerialNumber(User user, UserModel model)
{
    if (!model.ShouldApplySerialNumber()) return;

    user.SerialNumber = user.NewSerialNumber();
}

private void ApplyPasswordHash(User user, UserModel model)
{
    if (!model.ShouldApplyPasswordHash()) return;

    user.PasswordHash = _password.HashPassword(model.Password);
}