以下是一个基于角色的安全示例,使用ASP.NET MVC 5和Identity框架来实现:
创建一个新的ASP.NET MVC 5项目。
在NuGet包管理器控制台中运行以下命令安装Microsoft.AspNet.Identity包:
Install-Package Microsoft.AspNet.Identity
创建一个名为ApplicationUserRole的类,继承自IdentityRole类:
using Microsoft.AspNet.Identity.EntityFramework;
public class ApplicationUserRole : IdentityRole
{
public ApplicationUserRole() : base() { }
public ApplicationUserRole(string roleName) : base(roleName) { }
}
创建一个名为ApplicationDbContext的类,继承自IdentityDbContext类,并将ApplicationUserRole作为泛型参数:
using Microsoft.AspNet.Identity.EntityFramework;
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext() : base("DefaultConnection") { }
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
public DbSet UserRoles { get; set; }
}
在Web.config文件中,确保数据库连接字符串正确配置:
在IdentityConfig.cs文件中,将UserManager和RoleManager的类型更改为ApplicationUserManager和ApplicationRoleManager,并将UserManager和RoleManager的创建更改为使用ApplicationDbContext:
public class ApplicationUserManager : UserManager
{
public ApplicationUserManager(IUserStore store)
: base(store)
{
}
public static ApplicationUserManager Create(IdentityFactoryOptions options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore(context.Get()));
// 省略其他配置
return manager;
}
}
public class ApplicationRoleManager : RoleManager
{
public ApplicationRoleManager(IRoleStore roleStore)
: base(roleStore)
{
}
public static ApplicationRoleManager Create(IdentityFactoryOptions options, IOwinContext context)
{
var roleStore = new RoleStore(context.Get());
return new ApplicationRoleManager(roleStore);
}
}
在Startup.cs文件中,将ConfigureAuth方法中的UserManager和RoleManager配置更改为使用ApplicationUserManager和ApplicationRoleManager:
public void ConfigureAuth(IAppBuilder app)
{
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext(ApplicationUserManager.Create);
app.CreatePerOwinContext(ApplicationRoleManager.Create);
// 省略其他配置
}
在控制器或操作方法上使用Authorize属性来限制访问:
[Authorize(Roles = "Admin")]
public ActionResult SomeAction()
{
// 只有Admin角色的用户可以访问这个操作方法
return View();
}
以上示例展示了如何使用ASP.NET MVC 5和Identity框架来实现基于角色的安全。你可以根据自己的需求进行修改和扩展。