这次的项目在权限模块使用了一个小技巧,个人认为还是比较可取的,希望大家看后多提意见。
例如在一个网站中有,新闻,告示,博客,相册几个小模块,相对于有权限的用户才可以进行发布,编辑和删除。
首先要讲的是在数据库中的字段设计,之前的项目都是采用4个字段,即每个模块对应一个字段,这次只采用了一个varchar类型的字段存储的数据类似"00000","00010","11110" …… 1代表拥有权限,0代表没有,没有用的位以备扩展,也可以设置的更长一些。
然后定义一个权限类 Privilege.cs ,定义如下:
在程序中如果需要判断用户是否有对应模块的权限,只需要根据用户ID 到 表中取出权限串,就是上面提到的那一串数字,然后通过构造方法付给 Privilege 类的 Limit 属性。
设置某用户的权限
将str的内容存到数据库即可。
例如在一个网站中有,新闻,告示,博客,相册几个小模块,相对于有权限的用户才可以进行发布,编辑和删除。
首先要讲的是在数据库中的字段设计,之前的项目都是采用4个字段,即每个模块对应一个字段,这次只采用了一个varchar类型的字段存储的数据类似"00000","00010","11110" …… 1代表拥有权限,0代表没有,没有用的位以备扩展,也可以设置的更长一些。
然后定义一个权限类 Privilege.cs ,定义如下:
1 [Serializable]
2 public class Privilege
3 {
4 //用户权限
5 private char[] limit = new char[5] ;
6
7 public string Limit
8 {
9 set {
10 limit = value.ToCharArray();
11 }
12 }
13
14 public Privilege()
15 {
16 InitVar();
17 }
18
19 public Privilege(string limit)
20 {
21 this.limit = limit.ToCharArray();
22 }
23
24 //5位 以备扩展
25 private void InitVar()
26 {
27 limit = "00000".ToCharArray();
28 }
29
30 /// <summary>
31 /// 告示
32 /// </summary>
33 public bool CanNotice
34 {
35 get
36 {
37 return (limit[0] == '1');
38 }
39 set
40 {
41 limit[0] = (value ? '1' : '0');
42 }
43 }
44
45 /// <summary>
46 /// 新闻
47 /// </summary>
48 public bool CanNews
49 {
50 get
51 {
52 return (limit[1] == '1');
53 }
54 set
55 {
56 limit[1] = (value ? '1' : '0');
57 }
58 }
59
60 /// <summary>
61 /// 博客
62 /// </summary>
63 public bool CanBlog
64 {
65 get
66 {
67 return (limit[2] == '1');
68 }
69 set
70 {
71 limit[2] = (value ? '1' : '0');
72 }
73 }
74
75 /// <summary>
76 /// 成员相册
77 /// </summary>
78 public bool CanAlbum
79 {
80 get
81 {
82 return (limit[3] == '1');
83 }
84 set
85 {
86 limit[3] = (value ? '1' : '0');
87 }
88 }
89
90 /// <summary>
91 /// 获取权限字符串
92 /// </summary>
93 /// <returns></returns>
94 public char[] GetLimit()
95 {
96 return limit;
97 }
98
99 }
2 public class Privilege
3 {
4 //用户权限
5 private char[] limit = new char[5] ;
6
7 public string Limit
8 {
9 set {
10 limit = value.ToCharArray();
11 }
12 }
13
14 public Privilege()
15 {
16 InitVar();
17 }
18
19 public Privilege(string limit)
20 {
21 this.limit = limit.ToCharArray();
22 }
23
24 //5位 以备扩展
25 private void InitVar()
26 {
27 limit = "00000".ToCharArray();
28 }
29
30 /// <summary>
31 /// 告示
32 /// </summary>
33 public bool CanNotice
34 {
35 get
36 {
37 return (limit[0] == '1');
38 }
39 set
40 {
41 limit[0] = (value ? '1' : '0');
42 }
43 }
44
45 /// <summary>
46 /// 新闻
47 /// </summary>
48 public bool CanNews
49 {
50 get
51 {
52 return (limit[1] == '1');
53 }
54 set
55 {
56 limit[1] = (value ? '1' : '0');
57 }
58 }
59
60 /// <summary>
61 /// 博客
62 /// </summary>
63 public bool CanBlog
64 {
65 get
66 {
67 return (limit[2] == '1');
68 }
69 set
70 {
71 limit[2] = (value ? '1' : '0');
72 }
73 }
74
75 /// <summary>
76 /// 成员相册
77 /// </summary>
78 public bool CanAlbum
79 {
80 get
81 {
82 return (limit[3] == '1');
83 }
84 set
85 {
86 limit[3] = (value ? '1' : '0');
87 }
88 }
89
90 /// <summary>
91 /// 获取权限字符串
92 /// </summary>
93 /// <returns></returns>
94 public char[] GetLimit()
95 {
96 return limit;
97 }
98
99 }
在程序中如果需要判断用户是否有对应模块的权限,只需要根据用户ID 到 表中取出权限串,就是上面提到的那一串数字,然后通过构造方法付给 Privilege 类的 Limit 属性。
1 Privilege privilege = new Privilege("11110");
2 if (privilege.CanBlog)
3 {
4 ……
5 }
6
7 if (privilege.CanNews)
8 {
9 ……
10 }
2 if (privilege.CanBlog)
3 {
4 ……
5 }
6
7 if (privilege.CanNews)
8 {
9 ……
10 }
设置某用户的权限
1 Privilege privilege = new Privilege();
2 privilege.CanBlog = true;
3 privilege.CanNews = true;
4
5 //获取权限串
6 string str = privilege.GetLimit();
2 privilege.CanBlog = true;
3 privilege.CanNews = true;
4
5 //获取权限串
6 string str = privilege.GetLimit();
将str的内容存到数据库即可。