在asp.net后台管理系统开发中,有一个永远绕不过去的核心功能,那就是权限管理。他使你的整个管理系统活了过来,可以适应公司不同职位人员的使用。
下边是我搭得简易界面效果图:
1、基本需求
看界面你就知道,你首先最少应该有三个模块显示,包括你的模块管理、角色管理、管理员的人员管理。
在数据库中你最少需要四个表,其他的看个人需要了。这四个表分别是
Module(模块表)、User(管理员表)、Role(角色表)、Role_Module(角色_模块授权记录表)。
2、界面生成
因为我使用的是EF,所以实体类生成就直接跳过了。
页面搭建和基本的页面显示使用的是Ajax+easyUI,这个也随自己的写法写,毕竟每个人的设计都不一样。
3、登录界面
做权限你肯定需要一个登录页面,登录页面找模板还是自己设计需要你自己找了,我主要是说一下后台的代码,进行功能的实现。
首先在登录的数据访问层(LoginDal)中添加对数据的操作
public IEnumerable<Module> GetMenu(int rid)
{
return Ef.Role_Module.Where(x => x.Role.ID == rid
&&x.Module.M_type=="1" &&
x.Module.M_ParentID==0).ToList().Select(x => new Module {
M_name = x.Module.M_name,M_path = x.Module.M_path,
M_IconCls = x.Module.M_IconCls,ID=x.Module.ID }).ToList();
}
注:(1)IEnumerable<>是一个数据的结构,指可用foreach遍历的“集合”。
http://bbs.csdn.net/topics/391905003?page=1
他会对你理解IEnumerable<>有一些帮助
(2)方法是通过不同角色、是否是为“1”一级菜单,是否是为0的菜单,不是按钮。来查出一级菜单,然后查询一个NEW Module数据。
然后是在业务逻辑层(LoginBll)中进行业务操作:
public IEnumerable<Module> GetMenu(int rid)
{
LoginDal realDal = (LoginDal)Dal;
return realDal.GetMenu(rid);
}
继承Dal中的方法。
public User GetUserByNamePaw(LoginModel model)
{
Expression<Func<User, bool>> where = x => x.U_name == model.name && x.U_pwd == model.pwd;
return Dal.Search(where).FirstOrDefault();
}
LoginModel是我自定义的一个实体类,其中存放了定义的密码,账号和可能用到的验证码。
Expression<Func<User, bool>
根据条件动态生成LINQ查询条件,将Func类型的变量作为参数传给Where方法。
在EF中,如果单一将Func类型的变量作为参数传给Where方法进行LINQ查询,会造成全表查询的错误,将整个数据库表中的数据加载到内存
[Required]
public string name { get; set;