我是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() {}
谢谢
答案 0 :(得分:0)
是的,您可以使用数据库中的现有角色。
您可以使用[Authorize(Roles = MyDBEntities.Roles.Find(1)]
,但不能使用RoleManager class
,因为它不是常量值,而是动态的。
要添加新角色,您必须使用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"
};
}
}
}
方法以及其他方法来管理应用使用的角色。
要在授权期间改变行为,您必须实现从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>
资源:
答案 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;
}
}