cod*_*tte 258 asp.net-mvc controller roles
现在我装饰一个这样的方法,让"成员"访问我的控制器动作
[Authorize(Roles="members")]
Run Code Online (Sandbox Code Playgroud)
如何允许多个角色?例如,以下内容不起作用,但它显示了我要做的事情(允许"成员"和"管理员"访问):
[Authorize(Roles="members", "admin")]
Run Code Online (Sandbox Code Playgroud)
小智 565
另一种选择是在发布时使用单个授权过滤器,但删除内部引用.
[Authorize(Roles="members, admin")]
Run Code Online (Sandbox Code Playgroud)
Pab*_*aus 119
如果要使用自定义角色,可以执行以下操作:
CustomRoles 类:
public static class CustomRoles
{
public const string Administrator = "Administrador";
public const string User = "Usuario";
}
Run Code Online (Sandbox Code Playgroud)
用法
[Authorize(Roles = CustomRoles.Administrator +","+ CustomRoles.User)]
Run Code Online (Sandbox Code Playgroud)
如果您的角色很少,也许您可以将它们组合起来(为了清晰起见),如下所示:
public static class CustomRoles
{
public const string Administrator = "Administrador";
public const string User = "Usuario";
public const string AdministratorOrUser = Administrator + "," + User;
}
Run Code Online (Sandbox Code Playgroud)
用法
[Authorize(Roles = CustomRoles.AdministratorOrUser)]
Run Code Online (Sandbox Code Playgroud)
Mih*_*üür 78
一种可能的简化是子类AuthorizeAttribute:
public class RolesAttribute : AuthorizeAttribute
{
public RolesAttribute(params string[] roles)
{
Roles = String.Join(",", roles);
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
[Roles("members", "admin")]
Run Code Online (Sandbox Code Playgroud)
在语义上它与Jim Schmehil的答案相同.
Ber*_*iro 16
对于MVC4,使用带有我的角色的Enum(UserRoles),我使用自定义AuthorizeAttribute.
在我的控制行动中,我这样做:
[CustomAuthorize(UserRoles.Admin, UserRoles.User)]
public ActionResult ChangePassword()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
我使用这样的习惯AuthorizeAttribute:
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class CustomAuthorize : AuthorizeAttribute
{
private string[] UserProfilesRequired { get; set; }
public CustomAuthorize(params object[] userProfilesRequired)
{
if (userProfilesRequired.Any(p => p.GetType().BaseType != typeof(Enum)))
throw new ArgumentException("userProfilesRequired");
this.UserProfilesRequired = userProfilesRequired.Select(p => Enum.GetName(p.GetType(), p)).ToArray();
}
public override void OnAuthorization(AuthorizationContext context)
{
bool authorized = false;
foreach (var role in this.UserProfilesRequired)
if (HttpContext.Current.User.IsInRole(role))
{
authorized = true;
break;
}
if (!authorized)
{
var url = new UrlHelper(context.RequestContext);
var logonUrl = url.Action("Http", "Error", new { Id = 401, Area = "" });
context.Result = new RedirectResult(logonUrl);
return;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是FabricioMartínezTamayo修改过的FNHMVC的一部分https://github.com/fabriciomrtnz/FNHMVC/
Sed*_*t Y 11
您可以在 Startup.cs 中使用授权策略
services.AddAuthorization(options =>
{
options.AddPolicy("admin", policy => policy.RequireRole("SuperAdmin","Admin"));
options.AddPolicy("teacher", policy => policy.RequireRole("SuperAdmin", "Admin", "Teacher"));
});
Run Code Online (Sandbox Code Playgroud)
在控制器文件中:
[Authorize(Policy = "teacher")]
[HttpGet("stats/{id}")]
public async Task<IActionResult> getStudentStats(int id)
{ ... }
Run Code Online (Sandbox Code Playgroud)
“教师”政策接受 3 个角色。
| 归档时间: |
|
| 查看次数: |
156847 次 |
| 最近记录: |