基于角色的安全 MVC & Mongodb

Role based security MVC & Mongodb

我正在 asp.net mvc 应用程序和 mongodb 作为数据库。现在我想实现基于角色的安全和权限。例如,我们有角色 "user" 和 "admin"。现在一个用户 "A" 和角色 "user" 有权查看页面,而其他一些用户说 "B" 可以有权查看和编辑页面内容,而角色 "admin" 的用户可以拥有查看、编辑、添加和删除的所有权限。所以基本上我想要访问控制列表。请让我知道使用 mongodb.

实现此目的的最佳方法

谢谢

步骤很多,只能给你一个方向。

最简单的方法是使用 OWIN 身份验证中间件,并将每次访问作为声明存储在 Principle 对象中,这样您就可以使用 ASP.Net 内置的授权属性。

示例代码-

OWIN Authentication Middle-ware

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = "ApplicationCookie",
            LoginPath = new PathString("/Account/Login")
        });
    }
}

Store access as role claim in Principle object

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();
    }
}