如何实现将数据库中的身份验证角色退出到AspNet IdentityRole中

时间:2017-12-22 23:25:42

标签: asp.net asp.net-mvc razor authorization

我是asp mvc应用程序,首先是数据库,我有一个表来为我的用户和联结表user_role保留另一个角色。

我将以下课程添加到我的应用

Microsoft.AspNet.Identity.Owin 
Microsoft.AspNet.Identity.EntityFramework
Microsoft.Owin.Host.SystemWeb 

我可以使用现有的表格将角色应用到我的控制器

[Authorize(Roles = "Admin")]]
public ActionResult MySecretAction() {}

或者

[Authorize(Roles = MyDBEntities.Roles.Find(1)]]
public ActionResult MySecretAction() {}

谢谢

2 个答案:

答案 0 :(得分:0)

  1. 我可以使用db table中的现有角色吗?
  2. 是的,您可以使用数据库中的现有角色。

    您可以使用[Authorize(Roles = MyDBEntities.Roles.Find(1)],但不能使用RoleManager class,因为它不是常量值,而是动态的。

    1. 但是,当我为用户分配角色时,如何在现有表格中添加和删除角色?
    2. 要添加新角色,您必须使用CreateAsync public class AuthorizeRoleAttribute : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { // User is not authenticated(NOT logged in) // we are letting ASP.NET to use standard procedure => redirect her/him to login page if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { base.HandleUnauthorizedRequest(filterContext); } // User is authenticated(logged in) // we are going to show her/him custom view with error else { // Don't forget to create Unauthorized.cshtml view in Shared folder filterContext.Result = new ViewResult { ViewName = "~/Views/Shared/Unauthorized.cshtml" }; } } } 方法以及其他方法来管理应用使用的角色。

      1. 当我向某个方法添加一个角色,并且该用户无权使用它时,该应用程序会将他重定向回登录页面,在哪里更改?
      2. 要在授权期间改变行为,您必须实现从AuthorizeAttribute继承的自己的Authorization属性并覆盖OnAuthorization方法。

        [AuthorizeRole(Roles = "Admin")]]
        public ActionResult MySecretAction() {}
        

        然后您必须使用自定义AuthorizeRoleAttribute而不是默认值。

        <label for="billing_address_1" class="">Street address <abbr class="required" title="required">*</abbr></label>
        

        资源:

        RoleManager class

        Implementing RoleManager in ASP.NET MVC 5

        ASP.NET MVC 5 Identity: Extending and Modifying Roles

答案 1 :(得分:0)

我创建了一个服装授权类,我可以用来访问登录用户和我的数据库表

using System;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity;
using System.Linq;
using System.Collections.Generic;
using LoanApp.Models.DataBaseModel;


    [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
    public class DynamicAuthorize : AuthorizeAttribute
    {
      //  public string DefaultURL { get; set; }
        protected override bool AuthorizeCore(HttpContextBase context)
        { return true;
    }
    }