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

  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007
  • ThePointblank

    ThePointblan

    18 Aralık 2006