मेरे पास कुछ संस्थाएं हैं जिनमें डेटा है जो केवल कुछ उपयोगकर्ताओं के लिए सुलभ होना चाहिए।संपत्ति पर प्रति उपयोगकर्ता सुरक्षा के लिए WebApi OData
public class Foo
{
public virtual Bar { get; set; }
...
}
public class Bar
{
public string Secret { get; set; }
...
}
उदाहरण Bar.Secret
के लिए केवल UserA
लेकिन UserB
द्वारा नहीं द्वारा सुलभ होना चाहिए। मैं कर सकता तो कुछ इस तरह:
public class BarsController : ODataController
{
[EnableQuery]
public IHttpActionResult Get()
{
if (User.Identity.Name != "UserA")
return Unauthorized();
return _db.Bars();
}
}
कि एक बुरा कार्यान्वयन होने के अलावा। यह इस नियंत्रक को कवर नहीं करता:
public class FoosController : ODataController
{
[EnableQuery]
public IHttpActionResult Get()
{
return _db.Foos();
}
}
कौन सा /odata/Foos?$expand=Bars
साथ कहा जा सकता है और उसके बाद मैं Bar.Secret
देख सकते हैं। मैं Foo
पर $expand
को अक्षम नहीं कर सकता क्योंकि यह क्वेरी UserA
के लिए पूरी तरह से कानूनी है और इसकी भी आवश्यकता है।
क्या ओडाटा अनुरोध करने वाली संस्थाओं में शामिल कुछ भविष्यवाणियों के खिलाफ प्रश्नों को सत्यापित करने का कोई तरीका है।
कुछ
तरहpublic class SecureEnableQueryAttribute : EnableQueryAttribute
{
public bool ValidateResult(IEnumerable<T> entities)
{
return entities.All(x => x.Secret == UserA.Secret);
}
}