1

1 AuthorizeUserAttribute.cs является классом для атрибута костюма АвторизоватьсяMVC Ошибка HTTP 403.14 - Forbidden после создания новой записи

public class AuthorizeUserAttribute : AuthorizeAttribute 

{ 

public string AccessLevel { get; set; } 
protected override bool AuthorizeCore(HttpContextBase httpContext) 
{ 
    var isAuthorized = base.AuthorizeCore(httpContext); 
    if (!isAuthorized) 
     return false; 

    if (this.AccessLevel.Contains("Admin")) 
    { 
     return true; 
    } 
    else return false; 
} 

2- это мой контроллер

[AuthorizeUser(AccessLevel = "Admin")] 

public class ProductsController : Controller 

{ 
private DataBaseContext db = new DataBaseContext(); 
public ActionResult Index() 
{ 
    var product = db.Product.Include(p => p.ProductGroup); 
    return View(product.ToList()); 
} 

} 



[AuthorizeUser(AccessLevel = "Admin")] 

public ActionResult Create([Bind(Include = "Product_Id,ProductName,Description,PicUrl,Group_Id")] Product product) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Product.Add(product); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 

    ViewBag.Group_Id = new SelectList(db.ProductGroups, "Group_Id", "GreoupName", product.Group_Id); 
    return View(product); 
} 

3-FilterConfig.cs в папка start_up

public class FilterConfig 

{ 
public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    filters.Add(new HandleErrorAttribute()); 
    filters.Add(new AuthorizeAttribute()); 
    filters.Add(new AuthorizeUserAttribute()); 

} 
} 

4-Global.asax.cs

void Application_Start(object sender, EventArgs e) 
{ 
    // Code that runs on application startup 
    AreaRegistration.RegisterAllAreas(); 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
    RouteConfig.RegisterRoutes(RouteTable.Routes);  
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier; 

} 

5- Admin1Controller.cs для входа в систему и т.д. ...

[HttpPost] 
public ActionResult Login(LoginViewModel model) 
{ 
    if (!ModelState.IsValid) //Checks if input fields have the correct format 
    { 
     return View(model); //Returns the view with the input values so that the user doesn't have to retype again 
    } 

      if(model.Email == "[email protected]" & model.Password == "@1234psm") 
       { 
      var identity = new ClaimsIdentity(new[] { 
              new Claim(ClaimTypes.Name,"Admin"), 
              new Claim(ClaimTypes.Email, "[email protected]"), 
              new Claim(ClaimTypes.Role,"Admin") 

              }, "ApplicationCookie"); 

      var ctx = Request.GetOwinContext(); 
      var authManager = ctx.Authentication; 
      authManager.SignIn(identity); 

        return Redirect(GetRedirectUrl(model.ReturnUrl)); 
       } 
    ModelState.AddModelError("", "incorrect UserName or pass"); 
    return View(model); 


} 

после создания нового продукта и вернуться к продукции/шоу HTTP Error 403.14 - Forbidden страницы. в то время как напишите продукт/индекс показать правильную страницу

+0

@SimonWhitehead, если вы знаете эту проблему, так что помогите мне пожалуйста –

ответ

0

Во-первых, здесь нет кода, который на самом деле когда-либо устанавливает свойство AccessLevel по вашему пользовательскому атрибуту. Возможно, вы просто не опубликовали его, но если это все ваш код, то довольно очевидно, почему это не работает: AccessLevel всегда имеет значение null и поэтому никогда не содержит строку «Admin».

При этом вам даже не нужен специальный атрибут. AuthorizeAttribute уже обрабатывает роли. Кажется, вы пытаетесь реализовать какую-то параллельную ролевую функциональность, но это пустая трата времени. Просто выполните:

[Authorize(Roles = "Admin")] 

И назовите это днем.

+0

Мне нужно AccessLevel, пожалуйста, скажите, пожалуйста, скажите мне, почему AccessLevel имеет значение null –

+0

Потому что это просто свойство с авто-реализацией, которое вы никогда не назначаете значение. –

+0

Знаете ли вы, как это исправить? –