关于web应用程序安全的思考(序)
2008-11-26 13:36:02 来源:WEB开发网其中省略的部分都是通过对上述权限数据库的访问来完成。
除了的HasRight和GetRights接口外,涉及权限最多的就是权限管理了,包括群组建立,群组权限分配,用户加入群组,用户权限分配,用户管理员设定等等都可以封装成控件并且完成对上述权限数据库的增删改查即可,这样在以后涉及新权限时,权限管理部分都不用再额外投入开发成本了。
这里特别的说明就是
用户权限表:
UserRights(UserID,ObjectID,ObjectType,AppID)
任何权限抽象成ObjectID统一了各种权限的处理,如果对于某种权限单凭一个ObjectID不好说明时,可以增加一个ObjectID的描述档。例如有这样一种权限,用户在一个系统中对于不同的报表所拥有的权限不一样,有的只可以查询,有的却可以转Excel,有的还可以转PDF。这时候可以设计一个报表权限主文件
ReportRightID 报表ID 动作方式
1 订单报表 查询
2 订单报表 转Excel
3 采购报表 转PDF
而ObjectID存的就是ReportRightID了,当然这个报表权限主文件的增删改就是在分配权限时动态完成,以避免加入很多用不到的数据。
判断权限时,需要增加一个动作,即先根据需要判断的报表ID和动作方式获取ReportRightID,再调用HasRight方法判断。而获取权限如某user能够查询的报表有哪些,某user对订单报表的权限动作有哪些,同样只要扩展GetRights方法就可完成(基于时间的关系,就不再深入。如果有兴趣,可以联系笔者再行探讨)
上述工作完成后,判断权限就十分容易了,如厂别权限的判断:
string FACTRIGHTTYPE = "FACT"; //权限类别
//实例化权限数据获取器
GroupAdminDataProvider dp = new GroupAdminDataProvider(appID, FACTRIGHTTYPE);
//实例化权限类别
IRightProvider factRight = new DefaultRightProvider(dp);
factRight.HasRight(userID, factID); //判断权限
更多精彩
赞助商链接