【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(5.4) 登入功能的實現,建立與登入使用者相關的介面和實現類
索引
簡述
今天我們建立幾個與登入使用者相關的資料表的介面和實現類
專案準備
我們用的工具是:VS 2013 + SqlServer 2012 + IIS7.5
希望大家對ASP.NET MVC有一個初步的理解,理論性的東西我們不做過多解釋,有些地方不理解也沒關係,會用就行了,用的多了,用的久了,自然就理解了。
專案開始
一、新建登入使用者類Account
我們在(5.2)中我們登入驗證直接返回了管理員實體類Domain.SYS_USER,但是在實際的後臺操作驗證中,我們並不需要SYS_USER的許多屬性,同時我們需要它的一些擴充套件屬性,我們來新建一個管理員類,來具體的描述這個管理員,我們在Service類庫下面新建一個管理類Account.cs
程式碼:
1 using System.Collections.Generic; 2 3 namespace Service 4 { 5 /// <summary> 6 /// 通用使用者登入類,簡單資訊 7 /// </summary> 8 public class Account 9 { 10 #region Attribute 11 /// <summary> 12 /// 主鍵 13 /// </summary>View Code14 public int Id { get; set; } 15 /// <summary> 16 /// 姓名 17 /// </summary> 18 public string Name { get; set; } 19 /// <summary> 20 /// 登入的使用者名稱 21 /// </summary> 22 public string LogName { get; set; } 23 /// <summary>24 /// 登入密碼 25 /// </summary> 26 public string PassWord { get; set; } 27 /// <summary> 28 /// 是否管理員 29 /// </summary> 30 public bool IsAdmin { get; set; } 31 /// <summary> 32 /// 使用者頭像 33 /// </summary> 34 public string Face_Img { get; set; } 35 /// <summary> 36 /// 使用者主部門 37 /// </summary> 38 public Domain.SYS_DEPARTMENT DptInfo { get; set; } 39 /// <summary> 40 /// 使用者所在部門集合 41 /// </summary> 42 public List<Domain.SYS_DEPARTMENT> Dpt { get; set; } 43 /// <summary> 44 /// 許可權集合 45 /// </summary> 46 public List<Domain.SYS_PERMISSION> Permissions { get; set; } 47 /// <summary> 48 /// 角色的集合 49 /// </summary> 50 public List<Domain.SYS_ROLE> Roles { get; set; } 51 /// <summary> 52 /// 使用者崗位集合 53 /// </summary> 54 public List<Domain.SYS_POST_USER> PostUser { get; set; } 55 /// <summary> 56 /// 使用者可操作的模組集合 57 /// </summary> 58 public List<Domain.SYS_MODULE> Modules { get; set; } 59 #endregion 60 } 61 }
二、修改我們的使用者管理介面IUserManage
修改我們的使用者管理介面IUserManage 新增幾個方法:根據使用者ID獲取本職部門名稱、 刪除使用者、根據使用者構造使用者基本資訊、從Cookie中獲取使用者資訊
程式碼:
1 /// <summary> 2 /// 根據使用者ID獲取本職部門名稱 3 /// </summary> 4 string GetUserDptName(int id); 5 /// <summary> 6 /// 刪除使用者 7 /// </summary> 8 bool Remove(int userId); 9 /// <summary> 10 /// 根據使用者構造使用者基本資訊 11 /// </summary> 12 Account GetAccountByUser(Domain.SYS_USER user); 13 /// <summary> 14 /// 從Cookie中獲取使用者資訊 15 /// </summary> 16 Account GetAccountByCookie();View Code
三、我們分別建立幾個關聯表的介面和實現類
建立SYS_USERINFO(使用者檔案)、SYS_USER_ROLE(使用者角色)、SYS_USER_PERMISSION(使用者許可權)、SYS_POST_USER(使用者崗位)、SYS_USER_DEPARTMENT(使用者部門)、SYS_PERMISSION(許可權表)、SYS_DEPARTMENT(部門表)、SYS_MODULE(模組表)的介面和實現類
這兩天沒怎麼釋出東西,一是工作太忙,二是我提前把這些東西都寫好了,測試了一下,可能寫的會有些不合理,希望大家指正,我先貼出來,註釋我都寫了,大家可以先預想一下這些都是幹什麼用的,下一篇我們完成我們的登入功能,使用到了這些東西就一目瞭然了。
IUserInfoManage、UserInfoManage
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Service.IService 8 { 9 public interface IUserInfoManage:IRepository<Domain.SYS_USERINFO> 10 { 11 } 12 }View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Service.ServiceImp 7 { 8 /// <summary> 9 /// Service層使用者拓展資訊介面 10 /// add yuangang by 2016-05-19 11 /// </summary> 12 public class UserInfoManage : RepositoryBase<Domain.SYS_USERINFO>,IService.IUserInfoManage 13 { 14 } 15 }View Code
IUserRoleManage、UserRoleManage
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace Service.IService 8 { 9 /// <summary> 10 /// Service層使用者與角色關係介面 11 /// add yuangang by 2016-05-19 12 /// </summary> 13 public interface IUserRoleManage:IRepository<Domain.SYS_USER_ROLE> 14 { 15 /// <summary> 16 /// 設定使用者角色 17 /// add yuangang by 2016-05-19 18 /// </summary> 19 /// <param name="userId">使用者ID</param> 20 /// <param name="roleId">角色ID字串</param> 21 /// <returns></returns> 22 bool SetUserRole(int userId, string roleId); 23 } 24 }View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Service.ServiceImp 7 { 8 /// <summary> 9 /// Service層使用者與角色關係介面 10 /// add yuangang by 2016-05-19 11 /// </summary> 12 public class UserRoleManage : RepositoryBase<Domain.SYS_USER_ROLE>,IService.IUserRoleManage 13 { 14 /// <summary> 15 /// 設定使用者角色 16 /// add yuangang by 2016-05-19 17 /// </summary> 18 /// <param name="userId">使用者ID</param> 19 /// <param name="roleId">角色ID字串</param> 20 public bool SetUserRole(int userId, string roleId) 21 { 22 try 23 { 24 //1、刪除使用者角色 25 this.Delete(p => p.FK_USERID == userId); 26 //2、設定當前使用者的角色 27 if (string.IsNullOrEmpty(roleId)) return true; 28 foreach (var entity in roleId.Split(',').Select(t => new Domain.SYS_USER_ROLE() 29 { 30 FK_USERID = userId, 31 FK_ROLEID = int.Parse(t) 32 })) 33 { 34 this.dbSet.Add(entity); 35 } 36 return this.Context.SaveChanges() > 0; 37 } 38 catch (Exception e) { throw e; } 39 } 40 } 41 }View Code
IUserPermissionManage、UserPermissionManage
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Service.IService 7 { 8 /// <summary> 9 /// Service層使用者授權介面 10 /// add yuangang by 2016-05-19 11 /// </summary> 12 public interface IUserPermissionManage : IRepository<Domain.SYS_USER_PERMISSION> 13 { 14 /// <summary> 15 /// 設定使用者許可權 16 /// add yuangang by 2016-05-19 17 /// </summary> 18 /// <param name="userId">使用者ID</param> 19 /// <param name="newper">許可權字串</param> 20 /// <param name="sysId">系統ID</param> 21 /// <returns></returns> 22 bool SetUserPermission(int userId, string newper, string sysId); 23 } 24 }View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using Service.IService; 6 7 namespace Service.ServiceImp 8 { 9 /// <summary> 10 /// Service層使用者授權介面 11 /// add yuangang by 2016-05-19 12 /// </summary> 13 public class UserPermissionManage : RepositoryBase<Domain.SYS_USER_PERMISSION>,IService.IUserPermissionManage 14 { 15 IPermissionManage PermissionManage { get; set; } 16 /// <summary> 17 /// 儲存使用者許可權 18 /// </summary> 19 public bool SetUserPermission(int userId, string newper, string sysId) 20 { 21 try 22 { 23 //1、獲取當前系統的模組ID集合 24 var permissionId = this.PermissionManage.GetPermissionIdBySysId(sysId).Cast<int>().ToList(); 25 //2、獲取使用者許可權,是否存在,存在即刪除 26 if (this.IsExist(p => p.FK_USERID == userId && permissionId.Any(e => e == p.FK_PERMISSIONID))) 27 { 28 //3、刪除使用者許可權 29 this.Delete(p => p.FK_USERID == userId && permissionId.Any(e => e == p.FK_PERMISSIONID)); 30 } 31 //4、新增使用者許可權 32 var str = newper.Trim(',').Split(','); 33 foreach (var per in str.Select(t => new Domain.SYS_USER_PERMISSION() 34 { 35 FK_USERID = userId, 36 FK_PERMISSIONID = int.Parse(t) 37 })) 38 { 39 this.dbSet.Add(per); 40 } 41 //5、Save 42 return this.Context.SaveChanges() > 0; 43 } 44 catch (Exception e) { throw e; } 45 } 46 } 47 }View Code
IPostUserManage、PostUserManage
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Service.IService 7 { 8 /// <summary> 9 /// 崗位使用者關係業務介面 10 /// add yuangang by 2016-05-19 11 /// </summary> 12 public interface IPostUserManage : IRepository<Domain.SYS_POST_USER> 13 { 14 /// <summary> 15 /// 根據崗位ID獲取人員集合,可傳遞多個崗位ID 16 /// </summary> 17 List<Domain.SYS_USER> GetUserListByPostId(string postId); 18 /// <summary> 19 /// 根據人員ID獲取崗位集合,可傳遞多個 20 /// </summary> 21 List<Domain.SYS_POST> GetPostListByUserId(string userId); 22 /// <summary> 23 /// 新增崗位人員關係 24 /// </summary> 25 /// <param name="userId">人員ID</param> 26 /// <param name="postId">崗位ID集合</param> 27 /// <returns></returns> 28 bool SavePostUser(int userId, string postId); 29 /// <summary> 30 /// 根據崗位集合獲取崗位名稱,部門-崗位模式 31 /// </summary> 32 dynamic GetPostNameBySysPostUser(ICollection<Domain.SYS_POST_USER> collection); 33 34 } 35 }View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace Service.ServiceImp 7 { 8 /// <summary> 9 /// 崗位人員關係業務實現類 10 /// add yuangang by 2016-05-19 11 /// </summary> 12 public class PostUserManage : RepositoryBase<Domain.SYS_POST_USER>, IService.IPostUserManage 13 { 14 /// <summary> 15 /// 根據崗位ID獲取人員列表 16 /// </summary> 17 public List<Domain.SYS_USER> GetUserListByPostId(string postId) 18 { 19 try 20 { 21 string sql = @"select * from sys_user t where exists(select u.fk_userid from sys_post_user u 22 inner join sys_post_department p 23 on u.fk_post_departmentid=p.id 24 where t.id=u.fk_userid and p.fk_post_id in (" + postId + ") group by u.fk_userid)"; 25 return this.SelectBySql<Domain.SYS_USER>(sql); 26 } 27 catch (Exception e) { throw e.InnerException; } 28 } 29 /// <summary> 30 /// 根據使用者ID獲取所持有的崗位集合 31 /// </summary> 32 public List<Domain.SYS_POST> GetPostListByUserId(string userId) 33 { 34 return this.LoadAll(p => userId.Contains(p.FK_USERID.ToString())).Select(p => p.SYS_POST_DEPARTMENT.SYS_POST).ToList(); 35 } 36 37 /// <summary> 38 /// 新增崗位人員關係 39 /// </summary> 40 /// <param name="userId">人員ID</param> 41 /// <param name="postId">崗位ID集合</param> 42 /// <returns></returns> 43 public bool SavePostUser(int userId, string postId) 44 { 45 try 46 { 47 if (this.IsExist(p => p.FK_USERID == userId)) 48 { 49 //存在之後再對比是否一致 50 var oldCount = this.LoadAll(p => p.FK_USERID == userId).Select(p => p.FK_POST_DEPARTMENTID).ToList().Cast<int>().ToList(); 51 var newpostId = postId.Trim(',').Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(p => int.Parse(p)).ToList(); 52 if (oldCount.Count == newpostId.Count && oldCount.All(newpostId.Contains)) return true; 53 //刪除原有關係 54 this.Delete(p => p.FK_USERID == userId); 55 } 56 if (!string.IsNullOrEmpty(postId)) 57 { 58 //新增現有關係 59 var list = postId.Split(',').Select(item => new Domain.SYS_POST_USER() 60 { 61 FK_USERID = userId, 62 FK_POST_DEPARTMENTID =int.Parse(item) 63 }).ToList(); 64 return this.SaveList(list) > 0; 65 } 66 return true; 67 } 68 catch (Exception e) { throw e.InnerException; } 69 } 70 71 /// <summary> 72 /// 根據崗位集合獲取崗位名稱,部門-崗位模式 73 /// </summary> 74 public dynamic GetPostNameBySysPostUser(ICollection<Domain.SYS_POST_USER> collection) 75 { 76 //崗位部門關係ID集合 77 string post_departmentid = collection.Select(p => p.FK_POST_DEPARTMENTID).Aggregate(string.Empty, (current, t) => current + "'" + t + "',").TrimEnd(','); 78 try 79 {相關推薦
no