Application_AuthorizeRequest در mvc.core
سلام
معادل
13 پاسخ
سلام
مهندس من کد شمارا در قسمت اخر یک تغییری ایجاد کردم و جواب داد
public async Task<IActionResult> Index()
{
var username = "Admin";
var roles = new[] { "role1", "role2" };
var rememberMe = true;
var claims = new List<Claim>
{
new Claim(ClaimTypes.Name, username)
};
var a = new Claim(ClaimTypes.Name, username);
foreach (var role in roles)
{
claims.Add(new Claim(ClaimTypes.Role, role));
}
var claimsIdentity = new ClaimsIdentity(claims, "My");
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
await HttpContext.SignInAsync(claimsPrincipal);
return View();
}
کد بالا رو اصلاح کردم، جایگزین کنید.
سلام
وسپاس بابت وقتی که قرار میدهید برای سوالات
من کدهای زیر را نوشته ام
app.UseAuthentication();
app.UseAuthorization();
public class UserSystemProfile
{
public static string Name = Empty;
public static string[] Roles = null;
}
public IActionResult Index()
{
UserSystemProfile.Name = "1";
UserSystemProfile.Roles = dbContext.User_Role.Where(r=>r.UserId==1).Select(c => c.RoleId.ToString()).ToArray();
//جوابهای 1و2 را برمیگرداند
return View();
}
public IActionResult Test()
{
var a = User.IsInRole("1");
//بجای جواب
//true
//جواب
//false
//را برمیگرداند
return View();
}
اما جواب false را برمیگرداند نه true
کجا کدم مشکل دارد
سلام
مهندس من کدهای شمارا نوشتم و ارورهای شکل زیر را داد
سلام
من برای تست این صفحه را ساختم
public IActionResult Index()
{
UserSystemProfile.Name = "1";
UserSystemProfile.Roles = dbContext.User_Role.Where(r=>r.UserId==1).Select(c => c.RoleId.ToString()).ToArray();
//جوابهای 1و2 را برمیگرداند
return View();
}
معادل همان لاگین هست
که عدد 1 نام کاربری است و نقشها هم 1و2 هستند برای کاربر1
لطف میکنید بفرمایید باید چه کدی اضافه کنم
سلام
این کدها یکی هستند منظورتان آیا کد دیگری هم هست یا همین یک کد کفایت میکند
app.UseAuthentication();
app.UseAuthorization();
شما متد رو async تعریف نکردید و نمیتونید داخلش از await استفاده کنید. نکته بعد اینکه بخش Constants.AuthenticationSchema هم تو کد باید تعریف بشه، کد بالا رو تغییر دادم جایگزین کنید. متد رو هم به صورت async تعریف کنید. برای آشنایی بهتر از فیلم های مربوط در آموزش سی شارپ استفاده کنید.
سلام
مهندش
var claims = new List
{
new Claim(ClaimTypes.Name, username)
};
ارور زیر را میدهد
Using the generic type 'List<T>' requires 1 type arguments
من دقیقاً نمیدونم شما این کد رو از کجا آوردید، چون تو هیچ مستنداتی همچین کدی رو ندیدم! کد زیر یک نمونه ساده برای ورود به سایت هست:
var username = "Admin";
var roles = new[]{ "role1", "role2" };
var rememberMe = true;
var claims = new List<Claim>{
new Claim(ClaimTypes.Name, username)
};
foreach (var role in roles)
{
claims.Add(new Claim(ClaimTypes.Role, role));
}
var claimsIdentity = new ClaimsIdentity(claims, "MySchema");
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
await HttpContext.SignInAsync("MySchema", claimsPrincipal, new AuthenticationProperties
{
IsPersistent = rememberMe
});
سلام
من می خواهم سطح دسترسی را خودم بنویسم البته در mvc.net این کار را کرده بودم
اما در mvc.core معادل کد زیر را نمی دانم کجا بنویسم
protected void Application_AuthorizeRequest()
{
if (UserSystemProfile.name != String.Empty)
{
GenericIdentity userIdentity = new GenericIdentity(UserSystemProfile.name);
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(UserSystemProfile.name), UserSystemProfile.roles);
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(UserSystemProfile.name), UserSystemProfile.roles);
}
}
سلام، وقت بخیر
شما دقیقاً چه کاری قصد دارید انجام بدید. شما برای کنترل دسترسی تو سطحی که مد نظرتون هست باید از MiddleWare ها استفاده کنید که معمولاً خیلی کم بهش نیاز پیدا می کنید. اگر بگید قصد دارید چه کاری انجام بدید بهتر میشه راهنماییتون کرد.
شما عملیات های مربوط به ورود و خروج کاربر رو پیاده سازی نکردید! تو سایت باید قسمتی برای Signin داشته باشید که عملیات ورود کاربر انجام بشه و Role ها Assign بشه، بعد بتونید سطوح دسترسی رو چک کنید. داخل مستندات مایکروسافت یکبار بخش مربوط به امنیت رو مطالعه کنید.
شما داخل ASP.NET Core باید تو فایل Startup.cs تنظیمات مربوطه رو انجام بدید. کافیه تو متد Configure کدهای زیر رو اضافه کنید:
app.UseAuthentication();
app.UseAuthorization();
این کدها باعث میشه روند شناسایی کاربر لاگین شده توسط ASP.NET Core انجام بشه. بقیه موارد مثل ASP.NET هست، شما از خصوصیت User تو Controller ها و View ها می تونید استفاده کنید، همچنین از AuthorizeAttribute روی Action ها یا Controller ها برای کنترل سطح دسترسی می تونید استفاده کنید. اگر اطلاعات بیشتری نیاز دارید این لینک رو مطالعه کنید.