ASP.Net MVC:How 将声明权限附加到角色之类的操作
ASP.Net MVC:How to attach claim permission to action like roles
阅读有关角色和身份声明的文章,但仍有许多事情没有弄清楚。非常想知道当我们将使用带声明的身份时如何实现用户访问权限。
当我们使用角色时,我们会用单个或多个角色名称来装饰动作。如果用户具有该角色,则用户可以访问该操作,否则不会像下面的代码那样。
[AuthLog(Roles = "Manager")]
public ActionResult Create()
{
var Product = new ProductMaster();
return View(Product);
}
我想当我们处理身份和声明时,必须有一些方法可以将角色或权限附加到每个动作,例如角色。如果存在任何此类问题,请分享如何使用良好的示例代码实现它的想法或提供文章链接。谢谢
这是定制的 Authorize,它检查数据库的权限。
例如,您有 3 个 bools 权限 Account、Clients、Configuration
并且您想根据他们限制用户而不是在 actionresult
上放置以下行
您甚至可以在一个操作上添加两个权限,例如您有一个方法可以通过帐户和客户权限访问,而不是您可以添加以下行
[PermissionBasedAuthorize("Client, Account")]
下面这个方法是从数据库中检查布尔值。
public class PermissionBasedAuthorize : AuthorizeAttribute
{
private List<string> screen { get; set; }
public PermissionBasedAuthorize(string ScreenNames)
{
if (!string.IsNullOrEmpty(ScreenNames))
screen = ScreenNames.Split(',').ToList();
}
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
var UserId = HttpContext.Current.User.Identity.GetUserId();
ApplicationContext db = new ApplicationContext();
var Permissions = db.Permissions.Find(UserId);
if (screen == null || screen.Count() == 0)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
bool IsAllowed = false;
foreach (var item in screen)
foreach (var property in Permissions.GetType().GetProperties())
{
if (property.Name.ToLower().Equals(item.ToLower()))
{
bool Value = (bool)property.GetValue(Permissions, null);
if (Value)
{
IsAllowed = true;
}
break;
}
}
if (!IsAllowed)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
}
}
阅读有关角色和身份声明的文章,但仍有许多事情没有弄清楚。非常想知道当我们将使用带声明的身份时如何实现用户访问权限。
当我们使用角色时,我们会用单个或多个角色名称来装饰动作。如果用户具有该角色,则用户可以访问该操作,否则不会像下面的代码那样。
[AuthLog(Roles = "Manager")]
public ActionResult Create()
{
var Product = new ProductMaster();
return View(Product);
}
我想当我们处理身份和声明时,必须有一些方法可以将角色或权限附加到每个动作,例如角色。如果存在任何此类问题,请分享如何使用良好的示例代码实现它的想法或提供文章链接。谢谢
这是定制的 Authorize,它检查数据库的权限。 例如,您有 3 个 bools 权限 Account、Clients、Configuration 并且您想根据他们限制用户而不是在 actionresult
上放置以下行您甚至可以在一个操作上添加两个权限,例如您有一个方法可以通过帐户和客户权限访问,而不是您可以添加以下行
[PermissionBasedAuthorize("Client, Account")]
下面这个方法是从数据库中检查布尔值。
public class PermissionBasedAuthorize : AuthorizeAttribute
{
private List<string> screen { get; set; }
public PermissionBasedAuthorize(string ScreenNames)
{
if (!string.IsNullOrEmpty(ScreenNames))
screen = ScreenNames.Split(',').ToList();
}
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
var UserId = HttpContext.Current.User.Identity.GetUserId();
ApplicationContext db = new ApplicationContext();
var Permissions = db.Permissions.Find(UserId);
if (screen == null || screen.Count() == 0)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
bool IsAllowed = false;
foreach (var item in screen)
foreach (var property in Permissions.GetType().GetProperties())
{
if (property.Name.ToLower().Equals(item.ToLower()))
{
bool Value = (bool)property.GetValue(Permissions, null);
if (Value)
{
IsAllowed = true;
}
break;
}
}
if (!IsAllowed)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
}
}
}