小项目,出于学习MVC3+EF4.3的目的。
在设计权限部分时遇到的问题,功能权限都好办,通过自定义Authorize,重写OnAuthorization()方法即可;
但是,数据权限怎么办啊?难道让我在使用EF的时候,还要做SQL语句拼接吗?
疑问:
1、数据(或者称为资源)如何定义?
2、功能权限基于角色(Role)实现对用户的操作限制,那么数据权限呢?如何限制某个用户、某角色用户或者某群组用户对同一种资源,不同数量级的访问?如何定义这种规则(Rule)?
3、Java是可以配置Filter,在运行时实现不同用户登录时,访问的资源进行过滤;最近做过的C#项目,是通过根据登录用户的信息动态构造SQL语句来实现数据过滤的;那么基于EF框架,在不使用SQL语句拼接,或者使用SQL语句拼接,但结果仍然能够被EF托管的条件下,有没有实现运行时数据过滤的方式?
ASP.NET MVC框架是开源的,但EF好像不是啊……
其实,还有类似于如何在代码中实现数据权限检查的问题,如何分离业务逻辑与数据过滤的问题……
不太明白你的需求,数据权限按照功能权限一样的设计方法不可行吗?不知道你们数据是怎么存储的。可以建立一个表用来存放数据类型和数据表之间的关系,然后再建一个表存放数据类型和用户角色的联系。
其实有想过按照 功能权限 的方式设计 数据权限,但是按照“主谓宾”的思路,功能权限 的主语似乎固定为角色(Role),谓词只有“允许”和“禁止”,宾语具体到MVC中,则只有Controller和Action两种;另外,功能权限的检查 很容易实现,只需要重写OnAuthorization()方法,查询当前登录用户的角色即可。
数据权限 的差异貌似就太大了。
需求的话,可以简单的描述为,管理员可以查看所有学生信息,老师只能查看本班学生信息,学生只能查看本人信息,另外,有个老师是管理员,但他只能查看本班学生信息。
@飞扬的尘埃: 哦。不太懂了,祝你成功!
利用组织架构来处理吧。比如说,个人-》个人,组长->一组,班长->一班,......
这样处理,多角色用户的访问范围还是不能单独配置限定啊。
谢谢回复。
@飞扬的尘埃:
单独配置限定的话,需要另建角色数据规则来处理,比较复杂。
OnAuthorization 不能调用数据吗? 查询当前用户是否具备调用这个方法的权限 为什么要拼sql?
你描述这个就是功能权限的实现过程啊,我现在遇到的难题是,两个同角色用户都能访问某方法的时候,获取的数据范围是有区别的,要对这个描述建立规则。
这个需要记录中有定义好的过滤原数据,比较复杂