我正在使用ASP.NET MVC应用程序和MongoDB作为数据库。现在,我想实现基于角色的安全性和权限。例如,我们的角色"用户"one_answers" admin"。现在,一个具有角色"用户"的用户" a"有权查看页面,而其他一些用户说" b"可以允许查看和编辑带有" admin"的页面和用户的内容,可以具有所有权利视图,编辑,添加并删除。因此,我基本上想要访问控制列表。请让我知道使用MongoDB来实现这一目标的最佳方法。
谢谢
有很多步骤,所以我只能给您一个方向。
最简单的方法是使用Owin Authentication Middleware,并将每个访问存储为原则对象中的索赔,以便您可以在授权属性中使用ASP.NET的构建。
示例代码 -
OWIN身份验证中间软件
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "ApplicationCookie",
LoginPath = new PathString("/Account/Login")
});
}
}
将访问作为角色主张存储在原理对象中
public void SignIn(User user, IList<string> roleNames)
{
IList<Claim> claims = new List<Claim>
{
new Claim(ClaimTypes.Sid, user.Id.ToString()),
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.GivenName, user.FirstName),
new Claim(ClaimTypes.Surname, user.LastName),
};
foreach (string roleName in roleNames)
{
claims.Add(new Claim(ClaimTypes.Role, roleName));
}
ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationType);
IOwinContext context = _context.Request.GetOwinContext();
IAuthenticationManager authenticationManager = context.Authentication;
authenticationManager.SignIn(identity);
}
用法
[Authorize(Roles = "CanViewHome")]
public class IndexController : Controller
{
[Authorize(Roles = "CanEditHome")]
public ActionResult Edit()
{
return View();
}
}