50٪ تخفیف روی تمام دوره‌ها!
پایان تخفیف تا:
مشاهده دوره‌ها
0

محدودیت در تعداد 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 عدد تعریف کنم و بمشکل بالا برنخورم باید چکار کنم
باسپاس

پرسیده شده در 1400/03/19 توسط

2 پاسخ

1

سلام، وقت بخیر

مشکل اینجاست که شما برای ذخیره دیتا داخل کوکی محدودیت حجم دارید و این محدودیت توسط مرورگر مشخص میشه. شما باید داده های اضافی رو داخل دیتابیس نگهداری کنید و بعد زمان دریافت درخواست Role ها رو بخونی و داخل Principal ذخیره کنی.

پاسخ در 1400/03/19 توسط
0

سلام
مهندس من این مشکل را در 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ها را از بانک بخوانم 
باسپاس

پاسخ در 1400/03/20 توسط

پاسخ شما