Welcome

首页 / 软件开发 / 数据结构与算法 / 关于web应用程序权限管理的总结

关于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
在这个存储过程里面,有两个用户函数,分别用于计算字段权限和记录权限。