这次的项目在权限模块使用了一个小技巧,个人认为还是比较可取的,希望大家看后多提意见。
      例如在一个网站中有,新闻,告示,博客,相册几个小模块,相对于有权限的用户才可以进行发布,编辑和删除。
      首先要讲的是在数据库中的字段设计,之前的项目都是采用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     }

      在程序中如果需要判断用户是否有对应模块的权限,只需要根据用户ID 到 表中取出权限串,就是上面提到的那一串数字,然后通过构造方法付给 Privilege 类的 Limit 属性。
 1     Privilege privilege = new Privilege("11110");
 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();

     将str的内容存到数据库即可。
posted on 2009-07-31 20:36  Coolin  阅读(4074)  评论(55编辑  收藏  举报