• 1401/06/01

سوال در مورد PermissionCheckerAttribute :

سلام من یه فیلتر ایجاد کردم برای بررسی سطح دسترسی هام به اسم PermissionCheckerAttribute و از jwttoken استفاده میکنم یعنی توکن رو میگیرم و meddalware نوشتم که توکن و بهش میدم و کاربر رو بهم میده همه چیز اوکی کار میکنه فقط مشکل من همون فیلتر PermissionCheckerAttribute هست وقتی بالای اکشن با حتی کل کنترلر هم میزارمش اصلا کد به بریک پوینتم نمیرسه و درخواست ریجک میشه پیغام Unauthorized بهم میده ممنون میشم راهنماییم کنید.اینم کدی که نوشتم

 [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
   public class PermissionCheckerAttribute : AuthorizeAttribute, IAuthorizationFilter
   {
       private string _role;
       private IPermissionService _permissionService;

       public PermissionCheckerAttribute(string role)
       {
           _role = role;
       }

       public void OnAuthorization(AuthorizationFilterContext context)
       {
           _permissionService = context.HttpContext.RequestServices.GetService(typeof(IPermissionService)) as IPermissionService;

           User user = context.HttpContext.Items["User"] as User;

           var userId = user.Id;

           if (user == null)
           {
               context.Result = JsonResponseStatus.UnAuthorized();
           }

           var result = _permissionService.CheckPermission(userId, _role).Result;

           if (!result)
           {
               context.Result = JsonResponseStatus.NoAccsess();
           }
       }

 

 

 

  • 1401/06/03
  • ساعت 09:40

سلام دوست من

شما از Authorize Filter استفاده کردین که سیستم دیفالت اون با Cookie هستش و jwt رو نمیشناسه

باید خودتون یک attribute ساده بنویسین و ازش به عنوان Permission Checker استفاده کنین


  • 1401/06/03
  • ساعت 11:39

استاد عزیز ممنون از جوابتون توی آموزش ها در قسمت دسترسی خودتون دقیقا از همین شیوه استفاده کردین و jwt هم استفاده میکنین اونجا کار میکنه چرا ولی در کد من کار نمیکنه. البته من با نسخه 6 پروژه رو آوردم بالا ولی شما 2.1 بود 


  • 1401/06/05
  • ساعت 09:16

تنظیمات اصلی رو در فایل program.cs روی jwt قرار دادین؟


  • 1401/06/05
  • ساعت 13:13
builder.Services.AddAuthentication(options =>
{
   options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
   options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
   options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
   options.SaveToken = true;
   options.RequireHttpsMetadata = false;
   options.TokenValidationParameters = new TokenValidationParameters
   {
       //ValidIssuer = builder.Configuration["Jwt:Issuer"],
       //ValidAudience = builder.Configuration["Jwt:Audience"],
       IssuerSigningKey = new SymmetricSecurityKey
       (Encoding.UTF8.GetBytes(builder.Configuration.GetSection("AppSettings")["Secretkey"])),
       ValidateIssuer = true,
       ValidateAudience = true,
       ValidateLifetime = false,
       ValidateIssuerSigningKey = true
   };});
   builder.Services.AddAuthorization();

بله استاد این کدهای تظیمات هستن که گذاشتم در فایل Program

 


  • 1401/06/19
  • ساعت 00:44

این صفات رو پاک کنین و مجدد تست کنین

من از این صفات استفاده نکردم در پروژه:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]

logo-enamadlogo-samandehi