سؤال

بلدي تحكم فئة زينت مع AuthorizeAttribute لحماية الإجراءات:

[Authorize(Roles = "User Level 2")]
public class BuyController : Controller
{
    ...
}

في أي وقت إجراء استدعاء ولكن لم يكن المستخدم على الأقل في دور "مستوى المستخدم 2" هو توجيهك تلقائيا إلى صفحة تسجيل الدخول مع رابط مثل هذا:

http://localhost:1436/Account/Login?ReturnUrl=%2fBuy

إذا كان المستخدم بتسجيل الدخول بالفعل ، ولكن لا يملك الحق في مستوى الأمان ، ليس هذا هو الأمثل السلوك!فإنه سيكون من المنطقي أكثر لعرض الصفحة التي بإعلام المستخدم حول المفقودين مستوى بدلا من عرض صفحة تسجيل الدخول.

ماذا يمكنني أن أفعل لتخصيص هذا السلوك ؟ هل من الممكن أن يجتاز مستوى المستخدم إلى تسجيل الدخول العمل بطريقة أو بأخرى ؟

هل كانت مفيدة؟

المحلول

يمكنك بناء الخاصة بك يأذن السمة مثل هذا:

public class ClubAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
  base.OnAuthorization(filterContext);
  if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult)
  {
    filterContext.Result = new RedirectToRouteResult(
      new RouteValueDictionary {
      { "clubShortName", filterContext.RouteData.Values[ "clubShortName" ] },
      { "controller", "Account" },
      { "action", "Login" },
      { "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
    });
  }
}
}

أنا استخدم هذا إلى إعادة توجيه إلى محدد النادي في عضوية الموقع أنا المبنى.يمكنك التكيف مع هذه الحاجة الخاصة بك.BTW, في حالتي أنا لا إعادة توجيه إلى صفحة تسجيل الدخول ، ولكن لم تحقق لمعرفة ما إذا كان المستخدم مخولا إذا عرض رسالة أن لا يكون لديك الأذونات الصحيحة.لا شك أنك أيضا يمكن أن تضيف شيئا إلى ViewData أو TempData لعرضه على الصفحة ، ولكن لم أحاول أن

تحرير AuthorizationContext.إلغاء لم يعد موجودا في روتردام."من اللجنة المستقلة.النتيجة هي HttpUnauthorizedResult" يبدو أن يكون كافيا : ما حدث من اللجنة المستقلة.إلغاء (ASP.NET MVC)

نصائح أخرى

الوقت قد مرت فترة طويلة منذ آخر الجواب.

منذ عام 2009 ، الكثير من التقدم قد أحرز في تصريح الفضاء.ولا سيما واحة (هم وراء SAML) وموحدة XACML ، الموسعة التحكم في الوصول Markup Language.

XACML يعطي المطورين:

  • على نمط الاستخدام
  • العمارة
  • مرنة إذن سياسة اللغة

XACML يتماشى مع السمة على أساس التحكم في الوصول التي نيست بأن يكون المعتمد في التطبيقات في الوقت الحاضر.

إلقاء نظرة على هذا الجواب للحصول على مزيد من التفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top