কয়েক দশক ধরে বিভিন্ন প্রমাণীকরণ এবং অনুমোদনের কৌশল ব্যবহার করে, আমার বর্তমান এমভিসি অ্যাপ্লিকেশনটি নিম্নলিখিত পদ্ধতিটি ব্যবহার করে।
দাবিগুলি সমস্ত অনুমোদনের জন্য ব্যবহৃত হয়। ব্যবহারকারীদের একটি ভূমিকা নিযুক্ত করা হয়েছে (একাধিক ভূমিকা সম্ভব তবে আমার এটির দরকার নেই) - আরও নীচে।
যেমন প্রচলিত অনুশীলন, একটি দাবির অনুমোদন বিশিষ্ট শ্রেণি ব্যবহৃত হয়। যেহেতু বেশিরভাগ নিয়ামক ক্রিয়াগুলি CRUD হয়, তাই কোড-প্রথম ডাটাবেস প্রজন্মের আমার একটি রুটিন রয়েছে যা সমস্ত নিয়ামক ক্রিয়াকে পুনরায় করে এবং পড়ুন / সম্পাদনা করুন / তৈরি করুন / মোছার প্রতিটি নিয়ামক ক্রিয়াকলাপের জন্য দাবি প্রকার তৈরি করে। যেমন থেকে,
[ClaimsAuthorize("SomeController", "Edit")]
[HttpPost]
এমভিসি ভিউতে ব্যবহারের জন্য, একটি বেস নিয়ামক শ্রেণি ব্যাগ আইটেমগুলি উপস্থাপন করে
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var user = filterContext.HttpContext.User as System.Security.Claims.ClaimsPrincipal;
if (user != null)
{
List<Claim> claims = user.Claims.Where(c => c.Type == this.GetType().Name).ToList();
ViewBag.ClaimRead = claims.Any(c => c.Value == "Read");
ViewBag.ClaimEdit = claims.Any(c => c.Value == "Edit");
ViewBag.ClaimCreate = claims.Any(c => c.Value == "Create");
ViewBag.ClaimDelete = claims.Any(c => c.Value == "Delete");
}
base.OnActionExecuting(filterContext);
}
ওয়েবসাইট মেনু এবং অন্যান্য নিয়ন্ত্রক ক্রিয়াকলাপের জন্য আমার অন্যান্য দাবি রয়েছে। যেমন কোনও ব্যবহারকারী কোনও নির্দিষ্ট আর্থিক ক্ষেত্রটি দেখতে পারে কিনা can
bool UserHasSpecificClaim(string claimType, string claimValue)
{
var user = this.HttpContext.User as System.Security.Claims.ClaimsPrincipal;
if (user != null)
{
return user.Claims.Any(c => c.Type == claimType && c.Value == claimValue);
}
return false;
}
public bool UserHasTradePricesReadClaim
{
get
{
return UserHasSpecificClaim("TradePrices", "Read");
}
}
তাহলে ভূমিকা কোথায় ফিট করে?
আমার কাছে একটি টেবিল রয়েছে যা দাবির (ডিফল্ট) সেটটির সাথে একটি ভূমিকাকে লিঙ্ক করে। ব্যবহারকারীর অনুমোদন সেট করার সময়, ডিফল্টটি হ'ল ব্যবহারকারীকে তাদের ভূমিকার দাবী জানায়। প্রতিটি ব্যবহারকারীর ডিফল্ট চেয়ে কম বা বেশি দাবি থাকতে পারে। সম্পাদনা সহজ করার জন্য, দাবিগুলির তালিকাটি নিয়ন্ত্রক এবং ক্রিয়া (এক সারিতে) দ্বারা প্রদর্শন করা হয়, তারপরে তালিকাভুক্ত অন্যান্য দাবির সাথে। দাবিগুলি নির্বাচন করতে প্রয়োজনীয় "ক্লিক করা" হ্রাস করার জন্য ক্রিয়াগুলির একটি সেট নির্বাচন করতে কিছুটা জাভাস্ক্রিপ্টের সাথে বোতাম ব্যবহার করা হয়। সংরক্ষণে, ব্যবহারকারীদের দাবি মুছে ফেলা হয় এবং নির্বাচিত সমস্ত দাবি যুক্ত করা হয়। ওয়েব অ্যাপ্লিকেশনটি একবারে দাবি লোড করে, তাই কোনও পরিবর্তন অবশ্যই এই স্থিতিশীল ডেটার মধ্যে পুনরায় লোড প্রম্পট করতে হবে।
পরিচালকরা তাই প্রতিটি ভূমিকাতে কোন দাবি রয়েছে এবং কোন ভূমিকা এবং সেগুলি পূর্বনির্ধারিত দাবিগুলিতে সেট করার পরে কোনও ব্যবহারকারীকে কী দাবি করে তা চয়ন করতে পারেন। সিস্টেমে খুব কম ব্যবহারকারী রয়েছেন তাই এই ডেটা পরিচালনা করা সোজা