SORU
7 Kasım 2012, ÇARŞAMBA


ASP.NET MVC 4 Özel Yetki İzni Kodları (roller olmadan)ile Öznitelik

Görüş kullanıcılar MVC 4 uygulamasında ayrıcalık düzeyi (CRUD işlemi seviyeleri kullanıcılar atanan roller, tek ayrıcalık seviyesi vardır hayır) tabanlı erişim kontrol etmem gerekiyor.

Benim özel olacak AuthorizeUser aşağıda örnek olarak kullanacağım abd aşağıdaki gibi bağlıyoruz.

[AuthorizeUser(AccessLevels="Read Invoice, Update Invoice")]
public ActionResult UpdateInvoice(int invoiceId)
{
   // some code...
   return View();
}


[AuthorizeUser(AccessLevels="Create Invoice")]
public ActionResult CreateNewInvoice()
{
  // some code...
  return View();
}


[AuthorizeUser(AccessLevels="Delete Invoice")]
public ActionResult DeleteInvoice(int invoiceId)
{
  // some code...
  return View();
}

Bunu yapmak mümkün mü? Nasıl? Şimdiden teşekkürler...

Chatura

CEVAP
8 Kasım 2012, PERŞEMBE


Aşağıdaki gibi özel bir öznitelik ile bunu yapabilirim.

    [AuthorizeUser(AccessLevel = "Create")]
    public ActionResult CreateNewInvoice()
    {
        //...

        return View();
    }

Özel aşağıdaki gibi Sınıf Özniteliği.

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    // Custom property
    public string AccessLevel { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {                
            return false;
        }

        string privilegeLevels = string.Join("", GetUserRights(httpContext.User.Identity.Name.ToString())); // Call another method to get rights of the user from DB

        if (privilegeLevels.Contains(this.AccessLevel))
        {
            return true;
        }
        else
        {
            return false;
        }            
    }
}

HandleUnauthorizedRequest Bu yöntem geçersiz kılma, özel AuthorisationAttribute yetkisiz bir kullanıcı yönlendirebilir:

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectToRouteResult(
                    new RouteValueDictionary(
                        new
                            { 
                                controller = "Error", 
                                action = "Unauthorised" 
                            })
                    );
    }

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MrSuicideSheep

    MrSuicideShe

    9 NİSAN 2010
  • RealPapaPit

    RealPapaPit

    16 Mart 2009
  • TheRightTire

    TheRightTire

    14 EKİM 2009