1. 程式人生 > >【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(5.4) 登入功能的實現,建立與登入使用者相關的介面和實現類

【無私分享:從入門到精通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>
14 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 }
View Code

二、修改我們的使用者管理介面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