当前位置:主页聚焦 > > 正文

C# +SQL 存储过程 实现系统数据权限审查AOP效果 环球热门

时间: 2023-03-24 16:19:10 来源: 博客园
背景:

1、C/S系统架构


(资料图片仅供参考)

2、前端 Extjs

3、后台C#

4、数据库SQL

前端通过ajAx请求与后台通信。

前端应用页面统一继承入口类 BasePage

应用页面

public partial class xxxxxxx :BasePage  {    //y业务代码......}

BasePage

public class BasePage : System.Web.UI.Page{     //在这里实现数据权限核查  }
需求:

完成数据操作权限核查,并提醒前端

分析:

因为所有页面都继承了 BasePage 所以,现可以BasePage中加入代码。后台功能实现,因为要根据当前用户的ID 和所请求页面进行权限判断。

为提高效率可以存储过程中完成判断,并返回结果。

另外为便于管理和跟踪,判断结束后记录日志

存储过程

-- =============================================-- Author:        张立辉-- Create date: 2023-3-24-- Description:     系统权限控制 AOP-- =============================================create PROCEDURE [dbo].[Hztech_Aop]     @userID     as nvarchar(20),    @URI as nvarchar(200),        @result as nvarchar(20) output,    @msg as nvarchar(200) output         ASBEGINdeclare @roleid as int --角色IDdeclare @location as int-- DataStore/ 的位置declare @moduleAndPage as nvarchar(200)--模块/页面及请求参数declare @module as nvarchar(50) --模块declare @pageAndOptype as nvarchar(100)-- pagedeclare @page as nvarchar(100)-- pagedeclare @optype as nvarchar(50) --optypedeclare @Edit   as bitdeclare  @Del   as bitdeclare    @Close  as bitdeclare   @Lock   as bitdeclare   @Unop as bitdeclare   @Export as bitdeclare @pageName as nvarchar(100)declare @pass nvarchar(20)    set @pass="refuse"set @pageName="查询"--1 通过用户id 获取角色 id    select @roleid=isnull(roleid,0) from [xxxx_UserRoles] where UserID=@userID    if(@roleid is null or @roleid=0)    begin        set @pass="refuse"        set @msg="您未被授权进行任何操作。"        set @result= 0        goto logg    end--2 通过url 和 和角色ID 获取菜单权限    --2.1 判断是否为 datastore请求    set @location=charindex("xxxxxxxxxx/",@URI,0)    if(@location<=0)    begin        set @msg="pass+log,非xxxxxxxxxx操作。"        set @result= 1        goto logg    end    --2.2 包含 DataStore/    set   @moduleAndPage= SUBSTRING(@URI,@location+len("xxxxxxxxxxxx/"),len(@URI)-4)    --解析URL     set @module=dbo.GetSplitOfIndex(@moduleAndPage,"/",1)--模块    set @pageAndOptype=dbo.GetSplitOfIndex(@moduleAndPage,"/",2)--@pageAndOptype    set @page=dbo.GetSplitOfIndex(@pageAndOptype,"?",1) --yyy.aspx?optype=xxxx    set @optype=dbo.GetSplitOfIndex(@pageAndOptype,"?",2)-- optype=xxxx    set @optype=dbo.GetSplitOfIndex(@optype,"=",2) -- xxxx   或者 xxxx&p=v    if(CHARINDEX("&",@optype,0)>0) --包含多个参数    begin        set @optype=dbo.GetSplitOfIndex(@optype,"&",1) -- xxxx    end     --3 判断是否需要控制权限    /* optype  值范围            *Submit --dialog  单表提交        savePOBill  单据保存      。。。。。。。    */    --3.1 查询操作     if(@optype="getPobillAndDetail" or @optype="showfile" or charindex("Select",@optype,0)>0     or @optype="WorkFlowApprovePobill" --审批提交     )        begin            set @pass="log"            set @msg="pass,非修改操作。"            set @result= 1            goto logg        end    --3.2 获取权限      select  @Edit=[CanEdit]      ,@Del=[CanDel]      ,@Export=[CanExport]      ,@Close=[CanClose]      ,@Lock=[CanLock]      ,@Unop=[UnOperate] ,@pageName=[text]       from [permissionView]       where [Url] like "%/"+@module+"/%" and roleid=@roleid    --4 判断是否有 权限    if    (charindex("Submit",@optype,0)>0--dialog  单表提交        or @optype="savePOBill" --单据保存                 )        begin---编辑权限            if(@Edit=1)--可编辑                begin                    set @result= 1                             end            else            begin                set @result=0                 goto logg            end        end        ---其它权限核查 略    。。。。。。。。。。    else        set @result=0-- 其它情况 拒绝 refuse                                    if(@result=1)    set @pass="pass"--5 记录日志logg:if(@result=0)    set @msg="未授权进行当前操作"+@optype  insert into sys_aoplog([code]      ,[name]      ,[uri]      ,[verifyresult],  module,[page],optype,remark) values (@userID,@pageName,@URI,@pass,@module,@page,@optype,@msg)--6 返回结果    return @resultEND

前端调用存储过程进行鉴权

//判断权限                   bool purCheck= dataOperate.ExeAopProc(aurl, currentUser.UserID.ToString(), out purMsg);                   if (!purCheck)                   {                       string jsonlist1 = Common.ExtAjaxRequest.GetOperateRet("0", purCheck, purMsg);                       Response.Write(jsonlist1);                       Response.End();                   }
效果:后台日志

收工。

关键词:

相关文章

C# +SQL 存储过程 实现系统数据权限审查AOP效果 环球热门

背景:1、C S系统架构2、前端Extjs3、后台C 4、数据库SQL前端通过ajAx请求与后台通信。前端应用页面统一继承入口类BasePage应用页面publicpartial

来源:博客园2023-03-24

今日热闻!不良人6官方爆料,李星云逃跑原因有二,镜心魔大雕身份揭晓

哈喽,大家好,我是木子。《画江湖之不良人》第六季现在已经更新到了第5集,随着这集的更新,《画江湖之不良人》动漫导演李帅帅也对这集做出了

来源:哔哩哔哩2023-03-24

焦点热门:魔界复仇隐藏英雄哪个厉害_魔界复仇隐藏英雄

1、天使隐藏英雄密码FFSSTSMIJI蓝龙隐藏英雄密码FFLLYXMIJI选英雄的时候直接输入不用打出来。

来源:互联网2023-03-24

世界视讯!品味诗意节气 传承“非遗”之美

书香氤氲流溢彩,阅读悦享趁春光。3月21日是农历春分。当天西安市灞桥区东城第三小学“品味诗意节气传承‘非遗’之美”第四届海量阅读成果展示

来源:三秦网2023-03-24

利和兴:3月23日融资买入150.14万元,融资融券余额1.28亿元

3月23日,利和兴(301013)融资买入150 14万元,融资偿还133 97万元,融资净买入16 17万元,融资余额1 28亿元。

来源:证券之星2023-03-24