日期:2014-05-20  浏览次数:20773 次

碰到一个看上去很典型的可设计型需求,但是不知道该怎么分析!!!
类似权限控制:

有一项目表,但并不是所有登录用户都可以查看的,只有少部分具有权限的用户可以查看,要求如下:

1、可以查看所有项目信息。(终极boss)

2、可以查看部门项目信息。(部门老大)

3、可以查看和自己相关(负责或者参与过)的项目信息。

4、项目负责人可以操作(修改,发起等)该项目。


请大家提点意见。。。
------解决方案--------------------
你这不就是个权限管理吗,网上有代码,自己去google
------解决方案--------------------
设计用户表的时候加权限字段,然后进行操作前根据权限判断,能再进行,不能给出提示
------解决方案--------------------
首先,你这是基于数据的权限设计,需要有一定的隐喻能力,也就是抽象能力。也做到松耦合。
所谓的终级boss,部门经理,部门参与者,这些统统叫用户,对于用户而言,一视同仁,我相信你肯定有一个用户表。
对于项目,需要把权限点列出来,有查看,编辑,修改等操作。
用户应该是可以参与多个项目的,在某个项目中,可能是负责人,而在另一个项目中,可能只是参与者,而一个项目,会有多个用户。可以看出,用户和项目的关系非常明确,是多对多的关系。所以,权限不能放在用户中,也不能放在项目中。

回头看看sql server和windows系统的设计,你会发现你的需求和他是一样的,sql server中的登陆(login),对于同一个登陆,可以具备多个库的权限,而在不同的库中可以有不同的权限。sql server的做法是,它有两种内置角色,一个是服务器角色,全局的,有sysadmin,dbcreator,securityadmin等,这些服务器角色作用于所有的数据库,一旦授与某个登陆的服务器角色权限,它对所有数据库同时发生作用,另一个叫数据库角色,授与某个登陆的数据库权限,它只对某个数据库发生作用。windows也是一样的,就不多说了。

所以,对于你所说的终级boss(用户),授与一个服务器角色,而对于其它的用户,可以只授与数据库角色,服务器角色和数据库角色的权限点就按你的具体需求来定,如有查看,编辑,修改等。






------解决方案--------------------
硬编码肯定是少不了滴,如果你只是不想要if

到是可以不要if滴

比如
     Dictionary<用户组,委托>
把用户组滴操作用字典保存起来,后面就不需要if了,直接查表取得委托,调用就成
------解决方案--------------------
引用:
引用:你这不就是个权限管理吗,网上有代码,自己去google

无法完全套用,因为我这个是二次开发,在公司框架基础上来做的。。。

可是,现在我不想写

if(大boss)
{
//展示所有项目
//项目1
if(是负责人)
{
//添加“操作”
}
}

类似的代码了。。。


应该写
var user= 获取当前用户();
if(user.IsInRole("所有项目"))
   ....
else if(user.IsInRole("添加xxxx"))
   ....

换句话说,人家.net框架授权机制早就给你写好了,只是你不用而已。