一个论坛系统中,有N个版块,版块中,不同角色应给予不同权限。
看了应用系统权限表示的算法技巧 里面讲了两种方法,第一种方法,只能解决单权限问题,第二种方法,用的是位权方法,存在一种这样的问题,如果新增了一种权限,所用的权限位就必须新增一位,造成系统可扩展性差。
大家知道,C++里面,窗体的样式,不是多一种样式,就在后面|(or)一位,这样一来,权限问题就好解决了,扩展性就强了。
先定义权限值:
public class rights
{
public static int view = 1;
public static int post = 2;
public static int edit = 4;
public static int delete = 8;
//
}
{
public static int view = 1;
public static int post = 2;
public static int edit = 4;
public static int delete = 8;
//
}
假如我们要给Group1赋予可查看、可发表权限,那么他的权限值就为:
//
group1Rights = rights.view | rights.post;
//group1Rights = 3;
//
group1Rights = rights.view | rights.post;
//group1Rights = 3;
//
反过来,如果Group2的权限值为6,我们要确定他的权限:
//
int g2rights = 6;
bool isView = ((g2rights & rights.view)==rights.view);
//false
bool isPost = ((g2rights & rights.post)==rights.post);
//true
bool isEdit = ((g2rights & rights.edit)==rights.edit);
//true
bool isDelete = ((g2rights & rights.delete)==rights.delete);
//false
//
int g2rights = 6;
bool isView = ((g2rights & rights.view)==rights.view);
//false
bool isPost = ((g2rights & rights.post)==rights.post);
//true
bool isEdit = ((g2rights & rights.edit)==rights.edit);
//true
bool isDelete = ((g2rights & rights.delete)==rights.delete);
//false
//
当然,这些可以封装在一个类里。这里只是演示下。。。。。