数据结构

权限分配

1.在项目中新建文件夹Helpers
2.在HR.Helpers文件夹下添加EnumMoudle.Cs
复制代码 代码如下:
namespace HR.Helpers
{
public enum EnumMoudle
{
///
/// 模块
///
[EnumTitle("用户管理")]
SysUserManage_Role = 102,
[EnumTitle("机构管理")]
Department = 201,
[EnumTitle("人事资料")]
Employees = 301,
[EnumTitle("系统管理")]
BaseInfo = 404,
}
}
3.在HR.Helpers文件夹下添加ControllerBase.Cs
复制代码 代码如下:
namespace HR.Helpers
{
public class ControllerBase : Controller
{
///
/// 操作人,传IP....到后端记录
///
public virtual Operater Operater
{
get
{
return null;
}
}
///
/// 分页大小
///
public virtual int PageSize
{
get
{
return 15;
}
}
protected ContentResult JsonP(string callback, object data)
{
var json = Newtonsoft.Json.JsonConvert.SerializeObject(data);
return this.Content(string.Format("{0}({1})", callback, json));
}
///
/// 当弹出DIV弹窗时,需要刷新浏览器整个页面
///
///
public ContentResult RefreshParent(string alert = null)
{
var script = string.Format("", string.IsNullOrEmpty(alert) ? string.Empty : "alert('" + alert + "')");
return this.Content(script);
}
public new ContentResult RefreshParentTab(string alert = null)
{
var script = string.Format("", string.IsNullOrEmpty(alert) ? string.Empty : "alert('" + alert + "')");
return this.Content(script);
}
///
/// 用JS关闭弹窗
///
///
public ContentResult CloseThickbox()
{
return this.Content("");
}
///
/// 警告并且历史返回
///
///
///
public ContentResult Back(string notice)
{
var content = new StringBuilder("");
return this.Content(content.ToString());
}
public ContentResult PageReturn(string msg, string url = null)
{
var content = new StringBuilder("");
return this.Content(content.ToString());
}
///
/// 转向到一个提示页面,然后自动返回指定的页面
///
///
///
///
public ContentResult Stop(string notice, string redirect, bool isAlert = false)
{
var content = "
4.在项目文件夹中新建ControllerBase.cs
复制代码 代码如下:
namespace HR
{
public abstract class ControllerBase:HR.Helpers.ControllerBase
{
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
base.OnActionExecuted(filterContext);
}
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
}
}
}
5.在项目中新建RoleControllerBase.cs
复制代码 代码如下:
namespace HR
{
public class RoleControllerBase : ControllerBase
{
SystemUserRepository sysuserrepository = new SystemUserRepository();
///
/// 用户权限
///
public virtual List
{
get
{
var permissionList = new List
return permissionList;
}
}
public string BusinessPermissionString { get; set; }
[NotMapped]
public List
{
get
{
if (string.IsNullOrEmpty(BusinessPermissionString))
return new List
else
return BusinessPermissionString.Split(",".ToCharArray()).Select(p => int.Parse(p)).Cast
}
set
{
BusinessPermissionString = string.Join(",", value.Select(p => (int)p));
}
}
///
/// Action方法执行前没有权限提示信息
///
///
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
var noAuthorizeAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(AuthorizeIgnoreAttribute), false);
if (noAuthorizeAttributes.Length > 0)
return;
base.OnActionExecuting(filterContext);
bool hasPermission = true;
var permissionAttributes = filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(PermissionAttribute), false).Cast
permissionAttributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(PermissionAttribute), false).Cast
var attributes = permissionAttributes as IList
if (permissionAttributes != null && attributes.Count() > 0)
{
string cookie = CookieHelper.GetValue("SystemUserID");
if (string.IsNullOrEmpty(cookie))
{
filterContext.Result = Content("您没有登录!");
}
else
{
int mid = int.Parse(CookieHelper.GetValue("SystemUserID"));
var model = sysuserrepository.GetModel(mid);
BusinessPermissionString = model.BusinessPermissionString;
hasPermission = true;
foreach (var attr in attributes)
{
foreach (var permission in attr.Permissions)
{
if (!BusinessPermissionList.Contains(permission))
{
hasPermission = false;
break;
}
}
}
if (!hasPermission)
{
if (Request.UrlReferrer != null)
filterContext.Result = this.Stop("您没有权限!", "/default/ng");
else
filterContext.Result = Content("您没有权限!");
}
}
}
}
}
}
6.在每个Controller继承RoleControllerBase类
public class EmployeesController : RoleControllerBase
7.在HR.Helpers文件夹下添加PermissionAttribute.Cs ,并继承 FilterAttribute, IActionFilter
复制代码 代码如下:
namespace HR.Helpers
{
public class PermissionAttribute : FilterAttribute, IActionFilter
{
public List
public PermissionAttribute(params EnumMoudle[] parameters)
{
Permissions = parameters.ToList();
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//throw new NotImplementedException();
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
//throw new NotImplementedException();
}
}
}
8.然后在Controller或者Action方法加上验证
复制代码 代码如下:
[Permission(EnumMoudle.Employees),Authorize, ValidateInput(false)]
[Permission(EnumMoudle.SysUserManage_Role)]
9.在用户管理Controller中添加权限分配,修改方法
复制代码 代码如下:
#region 添加管理员
///
/// 添加页
///
/// 管理员实体类
///
[Authorize]
public ActionResult Add()
{
var moudleList = EnumHelper.GetItemValueList
this.ViewBag.MoudleList = new SelectList(mouldeList, "Key", "Value");
return View();
}
///
/// 添加事件
///
/// 实体类
///
///
[Authorize, HttpPost, ValidateInput(false)]
public ActionResult Add(SystemUser model, FormCollection fc)
{
model.BusinessPermissionString = fc["MoudelList"];
model.State = 1;
model.CreateTime = DateTime.Now;
systemuserrepository.SaveOrEditModel(model);
return RedirectToAction("UserList");
}
#endregion
//修改权限
[Authorize, AcceptVerbs(HttpVerbs.Post), ValidateInput(false)]
public ActionResult Edit(int id, FormCollection fc)
{
var model = systemuserrepository.GetModel(id);
if (model != null)
{
string password = model.PassWord;
if (Request.Form["PassWord"] != "")
{
model.BusinessPermissionString = fc["MoudleList"];
UpdateModel(model);
systemuserrepository.SaveOrEditModel(model);
}
else
{
model.BusinessPermissionString = fc["MoudleList"];
UpdateModel(model);
model.PassWord = password;
systemuserrepository.SaveOrEditModel(model);
}
return RedirectToAction("userlist");
}
else
return View("404");
}
#endregion
复制代码 代码如下:
[Authorize]
public ActionResult Edit(int id)
{
var model = systemuserrepository.GetModel(id);
if (model != null)
{
var moudleList = EnumHelper.GetItemValueList
this.ViewBag.MoudleList = new SelectList(moudleList, "Key", "Value", string.Join(",", model.BusinessPermissionString.ToString()));
return View(model);
}
else
return View("404");
}