以下是一种设计基于角色的访问系统的最佳方法,使用ASP.Net MVC 5:
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
public List Permissions { get; set; }
}
public class Permission
{
public int Id { get; set; }
public string Name { get; set; }
}
创建角色和权限数据库表,并使用Entity Framework进行映射。
创建一个自定义授权过滤器来验证用户的角色权限:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
private readonly string _permission;
public CustomAuthorizeAttribute(string permission)
{
_permission = permission;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// 获取当前用户的角色
var userRoles = httpContext.User.IsInRole("Admin") ? new List { "Admin" } : new List { "User" };
// 检查角色是否具有所需的权限
foreach (var role in userRoles)
{
var permissions = GetPermissionsForRole(role);
if (permissions.Contains(_permission))
{
return true;
}
}
return false;
}
private List GetPermissionsForRole(string role)
{
// 从数据库或缓存中获取角色的权限
var permissions = new List();
// 根据角色查询数据库或缓存,将权限添加到permissions中
return permissions;
}
}
[CustomAuthorize("Edit")]
public ActionResult Edit(int id)
{
// 只有具有“Edit”权限的用户才能访问此方法
return View();
}
通过以上步骤,您可以实现基于角色的访问系统,并限制用户根据其角色拥有的权限进行访问。请注意,上述代码示例仅提供了基本的框架,您可能需要根据实际需求进行适当的调整。