• 1400/03/04

بهینه کردن جدول Claim :

با سلام و احترام ؛ 

ممنون از اموزش عالی که قرار دادین , یه سوال داشتم ممنون میشم راهنمایی کنید 

شما یه جدول دارین به نام AspNetRoleCalems  که با جدول AspNetRoles  رابطه One to Many داره . 

در حال حاضر داخل جدول AspNetRoleCalems   نام کنترلر و اکشن های که قرار است دسترسی داشته باشن توسط یه Role را قرار میدین .

حالا سوال من اینجا با استفاده از Identity برای این که Redundancy در جدول AspNetRoleCalems   ایجاد نشه یه جدول واسط در نظر بگیریم و کیلید های AspNetRoles  و AspNetRoleCalems   رو داخلش قرار بدیم (many to many )و پالیسی رو بر اساس این نوع طراحی بنویسیم ایا امکان همچین کاری هست؟ چون در حال حاضر جدول AspNetRoleCalems    با اضافه شدن هر Role باعث میشه Redundancy  بالایی پیدا کنه

با تشکر

  • 1400/03/05
  • ساعت 12:23

سلام عزیز.

سیستم Identity متن باز هستش و براحتی میتونید کد هاش رو ببینید و تغییر بدید و از این لحاظ مشکلی نداره.

ولی در کل پیشنهاد میکنم اگر قرار هستش از احرازهویت داینامیک استفاده کنید، از ورژن دوم که توی دوره قرار دادیم استفاده کنید، ورژن 1 مشکلات زیادی داشتش از جمله پیچیدگی کد ها، تست کردنشون سخت بود، آپدیت کردن کدها سخت بود و... که بخاطر همین موارد ورژن دوم رو منتشر کردیم که بیشتر مشکلات ورژن اول رو رفع کرده.


  • 1400/03/05
  • ساعت 13:43

ممنون از پاسختون و راهنمایی که انجام دادین

من تا پارت 20 اموزش های شما رو دیدم ، قسمت دوم منظور شما از پارت 29 هست ؟ یعنی کلا احراز هویت قسمت  اول رو کلا  فاکتور بگیرم درسته ؟

 امکانش هست تو اموزش هاتون رول ها رو به صورت گروهی هم توضیح بدین ، به طور مثال گروه نویسندگان داریم که داخل این گروه رول نویسنده رول ویراستار رول انتشار دهنده قرار داره و ما گروه نویسندگان رو به کاربر میدیم اینطوری یه کاربر هر سه تا رول رو میگیره


  • 1400/03/05
  • ساعت 14:03

بله از جلسه 29 به بعد میشه، به شخصه اگر قرار به استفاده از احرازهویت داینامیک هستش از ورژن دوم استفاده میکنم.

برای رول گروهی فکر کنم همین الان هم میتونید اینکارو انجام بدید و نیاز به تغییر کد ها نیستش. لینک زیر رو بررسی  کنید :

https://docs.microsoft.com/en-us/aspnet/core/security/authorization/roles?view=aspnetcore-5.0

مثلا همون مثالی که گفتید به شکل زیر میشه انجام داد :

public class ControlPanelController : Controller
{
    [Authorize(Roles = "َAuthorsGroup, Editor")]
    public ActionResult Edit()
    {
    }
    
    
[Authorize(Roles = "َAuthorsGroup, Author")]
    public ActionResult Add()
    {
    }
    
    
[Authorize(Roles = "َAuthorsGroup, Publisher")]
    public ActionResult Publish()
    {
    }
}

توی مثال بالا کاربر فرضا برای دسترسی به اکشن متود Edit یا باید جزو رول AuthorsGroup باشه یا رول Editor، بقیه اکشن متود ها هم به همین شکل.


logo-samandehi