类似权限控制:
有一项目表,但并不是所有登录用户都可以查看的,只有少部分具有权限的用户可以查看,要求如下:
1、可以查看所有项目信息。(终极boss)
2、可以查看部门项目信息。(部门老大)
3、可以查看和自己相关(负责或者参与过)的项目信息。
4、项目负责人可以操作(修改,发起等)该项目。
请大家提点意见。。。硬编码肯定是少不了滴,如果你只是不想要if
到是可以不要if滴
比如
Dictionary<用户组,委托>
把用户组滴操作用字典保存起来,后面就不需要if了,直接查表取得委托,调用就成设计用户表的时候加权限字段,然后进行操作前根据权限判断,能再进行,不能给出提示你这不就是个权限管理吗,网上有代码,自己去google首先,你这是基于数据的权限设计,需要有一定的隐喻能力,也就是抽象能力。也做到松耦合。
所谓的终级boss,部门经理,部门参与者,这些统统叫用户,对于用户而言,一视同仁,我相信你肯定有一个用户表。
对于项目,需要把权限点列出来,有查看,编辑,修改等操作。
用户应该是可以参与多个项目的,在某个项目中,可能是负责人,而在另一个项目中,可能只是参与者,而一个项目,会有多个用户。可以看出,用户和项目的关系非常明确,是多对多的关系。所以,权限不能放在用户中,也不能放在项目中。
回头看看sql server和windows系统的设计,你会发现你的需求和他是一样的,sql server中的登陆(login),对于同一个登陆,可以具备多个库的权限,而在不同的库中可以有不同的权限。sql server的做法是,它有两种内置角色,一个是服务器角色,全局的,有sysadmin,dbcreator,securityadmin等,这些服务器角色作用于所有的数据库,一旦授与某个登陆的服务器角色权限,它对所有数据库同时发生作用,另一个叫数据库角色,授与某个登陆的数据库权限,它只对某个数据库发生作用。windows也是一样的,就不多说了。
所以,对于你所说的终级boss(用户),授与一个服务器角色,而对于其它的用户,可以只授与数据库角色,服务器角色和数据库角色的权限点就按你的具体需求来定,如有查看,编辑,修改等。
应该写
var user= 获取当前用户();
if(user.IsInRole("所有项目"))
....
else if(user.IsInRole("添加xxxx"))
....
换句话说,人家.net框架授权机制早就给你写好了,只是你不用而已。