‫۹ سال و ۴ ماه قبل، دوشنبه ۲۸ اردیبهشت ۱۳۹۴، ساعت ۱۸:۴۰
- متن را یکبار مطالعه کردید؟ یکبار مثال اصلی را با مثال فوق انطباق دادید؟
- در متن ذکر شده؛ مثال اصلی آن نوع ID را از نوع string تعریف کرده‌است. در اینجا برای نزدیک شدن مثال به دنیای واقعی و آن چیزی که مرسوم است، نوع Id به int تغییر داده شد.
اگر مورد نظر شما نیست، هرجایی که int مشاهده می‌کنید، تغییرش دهید به string. مثلا:
 ApplicationUser : IdentityUser<int, CustomUserLogin, CustomUserRole, CustomUserClaim>
این int را تغییر دهید به string و در هر جای دیگری که تعریف شده و تغییر کرده. این تغییرات را با انطباق مثال تغییر یافته با نمونه‌ی اصلی که لینکش در متن هست می‌توانید پیدا کنید.
‫۹ سال و ۴ ماه قبل، دوشنبه ۲۸ اردیبهشت ۱۳۹۴، ساعت ۰۴:۰۰
سفارشی سازی فیلتر Authorize از ارث بری از AuthorizeAttribute و سپس override کردن متد
public override void OnAuthorization(AuthorizationContext filterContext)
آن شروع می‌شود. در اینجا به اطلاعاتی مانند
filterContext.ActionDescriptor.ControllerDescriptor.ControllerName
filterContext.ActionDescriptor.ActionName
و خیلی موارد دیگر (آدرس صفحه filterContext.HttpContext.Request.Url تا کاربر filterContext.HttpContext.User و غیره) دسترسی خواهید داشت.
سپس باید طراحی جدیدی را بر اساس ControllerName و ActionName پیاده سازی کنید (یک جدول جدید طراحی کنید) تا این اکشن متدها یا کنترلرها امکان انتساب چندین Role متغیر را داشته باشند.
حالا زمانیکه این فیلتر Authorize سفارشی سازی شده بجای فیلتر Autorize اصلی استفاده می‌شود، نام اکشن متد و کنترلر جاری را از filterContext  دریافت می‌کنید. سپس این دو مورد به همراه اطلاعات User جاری، پارامترهایی خواهند شد جهت کوئری گرفتن از بانک اطلاعاتی و جدولی که از آن صحبت شد.
در اینجا هر زمانیکه نیاز بود دسترسی کاربری را قطع کنید فقط کافی است نتیجه‌ی این فیلتر سفارشی را به نحو ذیل بازگردانید:
 filterContext.Result = new HttpStatusCodeResult(403);
بنابراین در قسمت ادمین، یک صفحه‌ی جدید برای ثبت نام کنترلرها و اکشن متدها به همراه نقش‌های پویای آن‌ها خواهید داشت. سپس در این فیلتر Authorize سفارشی، دقیقا مشخص است که اکنون در کدام کنترلر و اکشن متد قرار داریم. بر این اساس (و سایر پارامترهایی که می‌توان از filterContext استخراج کرد) یک کوئری گرفته می‌شود و نقش‌های پویای فیلتر Authorize دریافت می‌شوند. نقش‌های کاربر جاری هم که مشخص هستند. این‌ها را با هم مقایسه می‌کنید و خروجی 403 را درصورت عدم تطابق، تنظیم خواهید کرد.
ضمنا در صفحه‌ی طراحی انتساب نقش‌های متغیر به اکشن متدها یا کنترلرها، امکان یافتن پویای لیست آن‌ها نیز وجود دارد.
‫۹ سال و ۴ ماه قبل، دوشنبه ۲۸ اردیبهشت ۱۳۹۴، ساعت ۰۰:۳۴
- کار messenger صرفا برقراری ارتباط بین دو یا چند ViewModel است؛ در یک AppDomain. از آن جهت ارسال پارامتر و اطلاعات، از یک ViewModel به ViewModel ایی دیگر استفاده می‌شود. مزیت آن عدم ارجاع مستقیم به یک ViewModel در ViewModel ایی دیگر است (مفهوم loose coupling ).
- View اطلاعات خودش را به ViewModel از طریق Binding دو طرفه و همچنین Commands ارسال می‌کند.
‫۹ سال و ۴ ماه قبل، یکشنبه ۲۷ اردیبهشت ۱۳۹۴، ساعت ۰۰:۱۲
بررسی کنید چه آدرسی درخواست شده و آیا موجود است یا خیر؟
        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null && requestContext.HttpContext.Request.Url != null)
                throw new InvalidOperationException(string.Format("Page not found: {0}",
                    requestContext.HttpContext.Request.Url.AbsoluteUri.ToString(CultureInfo.InvariantCulture)));
            return SmObjectFactory.Container.GetInstance(controllerType) as Controller;
        }
‫۹ سال و ۵ ماه قبل، پنجشنبه ۲۴ اردیبهشت ۱۳۹۴، ساعت ۱۷:۲۸
- در این سایت از همان عدد یک استفاده شده‌است.
- همچنین رتبه‌ی جستجوی انجام شده را هم باید لحاظ کنید:
var scoreNorm = 100.0f / hits.MaxScore;
foreach (var doc in docs.OrderByDescending(x => x.Score))
{
   // Score = doc.Score * scoreNorm // درصد نزدیکی به جستجوی انجام شده
}
‫۹ سال و ۵ ماه قبل، چهارشنبه ۲۳ اردیبهشت ۱۳۹۴، ساعت ۰۵:۵۵
- کار اضافی انجام دادید. جدول ادمین را حذف و بر اساس نقش‌های کاربر‌ها کار کنید.
- همچنین این سیستم اساسا کاری به طراحی جداول شما ندارد. اصل کار آن در FormsAuthentication.SetAuthCookie انجام می‌شود. در متد ActionResult LogOn نحوه‌ی پیاده سازی لاگین و خواندن اطلاعات آن به اختیار شما است. همچنین نقش‌ها از  public class CustomRoleProvider : RoleProvider دریافت می‌شوند. در اینجا مهم نیست که جداول به چه نحوی طراحی شده‌اند. مهم این است که خروجی IsUserInRole آن true هست یا false. مهم نیست که نحوه‌ی تهیه‌ی این true یا false قرار است از چه جدولی یا به چه نحو خاصی باشد.
‫۹ سال و ۵ ماه قبل، چهارشنبه ۲۳ اردیبهشت ۱۳۹۴، ساعت ۰۵:۱۶
به همین جهت مباحث Roles درنظر گرفته شده‌است. نقش مدیر، نقش نویسنده، نقش ادیتور، نقش کاربر صرفا خواننده و غیره. برای هر کدام یک جدول جدا درست نمی‌کنند. نقش این کاربرها را جداگانه مشخص می‌کنند.