mvc的资料网上本来就很少,而且关于RBAC的资料很不实用,所以结合网上已有资料重新写了一下权限控制的方法,以求简练实用。
1、新建一个RoleFilter.cs类文件,继承自ActionFilterAttribute,代码如下:
public class RoleFilter : ActionFilterAttribute
{
public string Role { get; set; }
///<summary>
/// Action执行前
/// </summary>
///<param name="filterContext"></param>
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
int ii_UID = Convert.ToInt32(filterContext.HttpContext.Session["UID"]);
if (ii_UID == 0)
{
filterContext.HttpContext.Response.Write("<script>alert('您还没有登录,请先登录!');window.location.href='/Member/Register'</script>");
}
string[] roles = Role.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < roles.Length; i++)
{
string ss_Role = Enum.GetName(typeof(Common.ee_Hyxz), Convert.ToInt32(filterContext.HttpContext.Session["Role"]));
if (ss_Role == roles[i].Trim())
{
return;
}
}
filterContext.HttpContext.Response.Write("<script>alert('您没有权限访问该页面!');window.location.href='/Member/Register'</script>");
}
}
2、在要进行控制的controller加上RoleFilter属性,Role写入可以进行访问的用户类别,因为只可以定义常量,所以暂时直接写入管理员对应的角色的value,如果用户和管理员都可以访问,可以输入Role="2,8",个人用户对应的value是2,
[RoleFilter(Role = "8")]
public ActionResult ProductManage()
{
}