这次的项目在权限模块使用了一个小技巧,个人认为还是比较可取的,希望大家看后多提意见。
例如在一个网站中有,新闻,告示,博客,相册几个小模块,相对于有权限的用户才可以进行发布,编辑和删除。
首先要讲的是在数据库中的字段设计,之前的项目都是采用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的内容存到数据库即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?