看了上面各位大虾的发言,很受启发,自己的项目也遇到过权限问题,故有点想法,拿出来大家看看。
从我自己的经验来看,一般应用系统的用户都是有清晰的上下级关系的。比如会计的领导是财务主管,财务主管的领导是主管财务的副经理,副经理的领导是经理,等等。许多活动都会使用到这种上下级的关系,比如,财务主管只能看到他手下的会计的工作报告,而不能看到其他人的。这种权限控制的应用很普遍,就不再举例了。因此我认为,user不是相互平行,相互独立的,而是有上下级关系的。
但是,让user之间有上下级关系是不合逻辑的。因为某个人不是天生就是其他人的领导,而是因为他们职位的不同,是职位之间有级次而不是人之间有级次(我们要提倡人人平等,呵呵)。那就引入positon吧,让user之间是平等的(本来就是:)),position之间有上下级关系。一个user可以对应多个position,因为有身兼多职的情况(这才是引入position的真正原因)。
那这种user-position不是和user-group一样了?不一样!
第一,position之间有明确的、有意义的上下级关系,position有实际含义,而group对此要求不严格(这也是group的长处和特色);
第二,position之间的权限是自下而上传递的,下级的权限上级自动拥有,而不是相反;
第三,我觉得两者的设计思想不同,我的实现是基于关系数据库的,position之间的关系用层次码实现,而jackyz是oo的思想。互有优劣吧,不过我觉得这儿的oo有点勉强。
总结一下:有三个实体
1、User。没什么说的
2、Position。有上下级关系,一个position只能有一个父position。user-position之间是多对多。可以一人身兼多职。
3、Operate。
至于group和role,我觉得只是一种辅助,不是必要的。如果系统的position很多,逐个授权违背了“简单,方便”的目的(jackyz语),那就引入group,将权限相同的position组成一个group进行集中授权。role也一样,是某一类Operate的集合,是为了简化针对多个Operate的操作。