关于web应用程序权限管理的总结2011-12-29 博客园 chegan首先要说明两点:1、本文不是解决一个通用权限管理系统的方案,只是解决特定环境下的权限管理问题。本文给出的实际实现方法是基于sql server数据库的,实现的语言是使用T-Sql语言。当然您可以有更多的实现方式。2、附件给出的数据库例子没有经过严格测试,不保证逻辑的正确性,以及性能方面的问题。首先需要一个存储过程来实现计算用户在表单上的权限,这个存储过程接受两个参数,用户ID和表单ID,在这个存储过程里面使用一条sql语句来计算用户在表单上的权限,如下所示:
-- =============================================--计算用户对表单的权限-- =============================================create PROCEDURE [dbo].[sp_GetUserPurveiewOnMenu] @userID nvarchar(100) ,--用户ID @formID nvarchar(100) --表单IDASBEGIN SELECT rp.formID, u.userID, --计算记录权限:只读记录 dbo.fun_Purview_GetRecordPurview(u.userID,rp.formID,"ReadOnlyRecords") as ReadOnlyRecords, --计算记录权限:隐藏记录记录 dbo.fun_Purview_GetRecordPurview(u.userID,rp.formID,"HiddenRecord") as HiddenRecord, --计算字段权限:只读记录(新增) dbo.fun_Purview_GetColumns(u.userID,rp.formID,"ReadOnlyColumnsOnAdd") as ReadOnlyColumnsOnAdd, --计算字段权限:隐藏记录(新增) dbo.fun_Purview_GetColumns(u.userID,rp.formID,"HiddenColumnsOnAdd") as HiddenColumnsOnAdd, --计算字段权限:只读记录(修改) dbo.fun_Purview_GetColumns(u.userID,rp.formID,"ReadOnlyColumnsOnModify") as ReadOnlyColumnsOnModify, --计算字段权限:隐藏记录(修改) dbo.fun_Purview_GetColumns(u.userID,rp.formID,"HiddenColumnsOnModify") as HiddenColumnsOnModify, --计算字段权限:隐藏记录(查询) dbo.fun_Purview_GetColumns(u.userID,rp.formID,"HiddenColumnsOnSearch") as HiddenColumnsOnSearch, --计算操作权限:新增 (CASE WHEN (SUM((CAST((CASE f.AddAction WHEN 0 THEN 0 ELSE rp.AddAction END) AS int)))) > 0 THEN cast(1 as bit) ELSE cast(0 as bit) END) as AddAction, --计算操作权限:修改 (CASE WHEN ( SUM((CAST((CASE f.ModifyAction WHEN 0 THEN 0 ELSE rp.ModifyAction END) AS int))) ) > 0 THEN cast(1 as bit) ELSE cast(0 as bit) END) as ModifyAction, --计算操作权限:删除 (CASE WHEN ( SUM((CAST((CASE f.DeleteAction WHEN 0 THEN 0 ELSE rp.DeleteAction END) AS int)))) > 0 THEN cast(1 as bit) ELSE cast(0 as bit) END) as DeleteAction, --计算操作权限:查询 (CASE WHEN ( SUM((CAST((CASE f.SearchAction WHEN 0 THEN 0 ELSE rp.SearchAction END) AS int)))) > 0 THEN cast(1 as bit) ELSE cast(0 as bit) END) as SearchAction FROM users u, userinroles ur, RolePurview rp, forms f WHERE u.userID = ur.userID AND ur.roleID = rp.roleID AND rp.formID = f.formID AND u.userID = @userid AND f.formID = @formID GROUP BY rp.formID,u.userIDEND
在这个存储过程里面,有两个用户函数,分别用于计算字段权限和记录权限。