目前公司正在整合公司系统,需要一套权限控制架构。
目前权限划分:
1、Login
2、menu
3、Program
4、function(页面控件)
5、Data(资料)
5.1 Field(资料列)
5.2 Row (资料行)
目前对前4种控制都已做到,但是对5种的权限管控就比较麻烦,现在的设计是这样的运用c#代理机制,对方法进行拦截,过滤SQL。如:
原SQL: SELECT a,b FROM A
过滤后SQL:SELECT a.a FROM (SELECT a,b FROM A) a Where a.a > 100
这样的设计要对每一条SQL的字段进行维护,经理认为这样的维护量太大。
请大家指点,给出一个更好的方案
原SQL: SELECT a,b FROM A 过滤后SQL: if(Exist(select top 1 from A_FieldConfig where user = currentUser and Field ='a') && Exist(select top 1 from A_FieldConfig where user = currentUser and Field ='b')) begin SELECT a,b FROM A Where id in (select id from A_RowConfig where user = currentUser) end 貌似直译的业务逻辑,好处在于易于理解(维护?),坏处在于,貌似配置起来不简单! |
"这样的设计要对每一条SQL的字段进行维护,经理认为这样的维护量太大。"??
一点不大,你只要在查询语句时负责解析where条件就可以了! 并不需要知道每一条sql语句,即使你一定要这样做,也只是在DAL层做一个重写,在业务层调用时调用重载后的方法即可。