محدودیت در تعداد ClaimTypes.Role
سلام
من کد زیر را نوشته ام
[HttpPost]
public async Task<ActionResult<LoginReponseViewModel>> Login(LoginRequestViewModel viewModel)
{
var username = viewModel.UserName;
var roleName = new List<string>();
for (int i = 0; i < 100; i++)
{
roleName.Add($"roleAdminstrator{i}");
}
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, username),
};
foreach (var role in roleName)
{
claims.Add(new Claim(ClaimTypes.Role, role));
}
var claimsIdentity = new ClaimsIdentity(claims, "MKIhashUNHG!@#HJSHJHSJJSJ");
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
await HttpContext.SignInAsync(claimsPrincipal);
return RedirectToAction("Index");
}
وقتی داده role برابر یا کمتر از 100 می باشد
مشکلی ندارم
فقط تعداد کوکیها زیاد می شود
اما وقتی تعداد role ها بیشتر از 100 میشود
برنامه بصورت صحیح کار نمی کند و پیام زیر ظاهر میشود
برای اینکه تعداد role را بتوانم در حدود500 عدد تعریف کنم و بمشکل بالا برنخورم باید چکار کنم
باسپاس
2 پاسخ
سلام، وقت بخیر
مشکل اینجاست که شما برای ذخیره دیتا داخل کوکی محدودیت حجم دارید و این محدودیت توسط مرورگر مشخص میشه. شما باید داده های اضافی رو داخل دیتابیس نگهداری کنید و بعد زمان دریافت درخواست Role ها رو بخونی و داخل Principal ذخیره کنی.
سلام
مهندس من این مشکل را در Mvc.net با کد زیر حل کرده بودم
protected void Application_AuthorizeRequest()
{
if (UserSystemProfile.name != String.Empty)
{
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(UserSystemProfile.name), UserSystemProfile.roles);
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(UserSystemProfile.name), UserSystemProfile.roles);
}
}
مشکل را حل کرده بودم
اما حالا وقتی کد زیر را در کنترلر login می نویسم
فقط در همان کنترلر درست کار می کند و در کنترلهای دیگر role هار ا نمی خواند
[HttpPost]
public async Task<ActionResult<LoginRequestViewModel>> Login(LoginRequestViewModel viewModel)
{
var username = viewModel.UserName;
var roleName = new List<string>();
for (var i = 1; i <= 500; i++)
{
roleName.Add(i.ToString());
}
var str = roleName.ToArray();
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, username),
};
var claimsIdentity = new ClaimsIdentity(claims, "MKIhashUNHG!@#HJSHJHSJJSJ");
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(username), str);
HttpContext.User = new GenericPrincipal(new GenericIdentity(username), str);
await HttpContext.SignInAsync(claimsPrincipal);
return RedirectToAction("Index");
}
ایا می توان تغییراتی در کدم ایجاد کنید تا مانند mvc.net این مشکل حل شود
ویا باید roleها را از بانک بخوانم
باسپاس