El procedimiento almacenado de C# +SQL realiza el efecto AOP de la revisión de la autoridad de datos del sistema

fondo:

  1. Arquitectura del sistema C/S

  2. Extjs front-end 

  3. Fondo C#

  4. Base de datos SQL

El front-end se comunica con el fondo a través de solicitudes ajAx.

La página de la aplicación front-end hereda uniformemente la clase de entrada BasePage

página de la aplicación

clase parcial pública xxxxxxx :BasePage 
 { 

    //y código comercial...... 
}

BasePage

clase pública BasePage: System.Web.UI.Page 
{ 
     //Implementar verificación de permisos de datos aquí   


}

necesidad:

Complete la verificación del permiso de operación de datos y recuerde al front-end

analizar:

Dado que todas las páginas heredan BasePage, ahora puede agregar código a BasePage. La función de segundo plano se realiza porque el juicio de permiso se realiza en función de la ID de usuario actual y la página solicitada.

Para mejorar la eficiencia, el juicio se puede completar en el proceso de almacenamiento y el resultado se puede devolver.

Además, para la conveniencia de la gestión y el seguimiento, el registro se registra después de que se completa el juicio.

procedimiento almacenado

 
-- =============================================== 
- - Autor: Zhang Lihui 
-- Fecha de creación: 2023-3-24 
-- Descripción: Control de acceso al sistema AOP 
-- ========================= ===== ================== 
crear PROCEDIMIENTO [dbo].[Hztech_Aop] 
    @userID como nvarchar(20), 
    @URI como nvarchar(200), 
    
    @result como salida nvarchar(20), 
    @msg como salida nvarchar(200) 
    
     
COMO 
COMENZAR 
declara @roleid como int --ID de rol 
declara @ubicación como int-- la ubicación de DataStore/ 
declara @moduleAndPage como nvarchar(200)--module/ Los parámetros de página y solicitud 
declaran @module as nvarchar(50) --module 
declare @pageAndOptype as nvarchar(100)-- page 
declare @page as nvarchar(100)-- page
declare @optype as nvarchar(50) --optype 


declare @Edit as bit 
declare @Del as bit 
declare @Close as bit 
declare @Lock as bit 
declare @Unop as bit 
declare @Export as bit 
declare @pageName as nvarchar(100) 
declare @pass nvarchar(20)     
set @pass='rechazar' 

set @pageName='query' 
--1 obtener id de rol por id de usuario 
    select @roleid=isnull(roleid,0) from [xxxx_UserRoles] where UserID=@userID 
    if( @roleid es nulo o @roleid=0) 
    begin 
        set @pass='refuse' 
        set @msg='No está autorizado a realizar ninguna acción. ' 
        set @result= 0 
        goto logg 
    end 
--2 Obtener permisos de menú a través de url e ID de rol 
    --2.1 Determinar si se trata de una solicitud de almacén de datos 
    establecer @ubicación=charindex('xxxxxxxxxx/',@URI,
    if(@ubicación<=0) 
    comienza a 
        establecer @msg='contraseña+registro, operación no xxxxxxxxxx. ' 
        set @result= 1 
        goto logg 
    end 
    --2.2 contiene DataStore/ 
    set @moduleAndPage= SUBSTRING(@URI,@location+len('xxxxxxxxxxxx/'),len(@URI)-4) 
    --parsing URL 
    set @module =dbo.GetSplitOfIndex(@moduleAndPage,'/',1)--conjunto de módulos 
    @pageAndOptype=dbo.GetSplitOfIndex(@moduleAndPage,'/',2)--@pageAndOptype  
    conjunto @page=dbo.GetSplitOfIndex(@pageAndOptype,' ?',1) --yyy.aspx?optype=xxxx 
    establecer @optype=dbo.GetSplitOfIndex(@pageAndOptype,'?',2)-- optype=xxxx 
    establecer @optype=dbo.GetSplitOfIndex(@optype,'=' ,
    if(CHARINDEX('&',@optype,0 )>0) --contiene varios parámetros 
    comienzan a 
        establecer @optype=dbo.GetSplitOfIndex(@optype,'&',
    
 
    
      . . . . . . . 

    */ 
    --3.1 Operación de consulta 
     if(@optype='getPobillAndDetail' or @optype='showfile' or charindex('Select',@optype,0)>0 
     or @optype='WorkFlowApprovePobill' -- envío de aprobación 
     ) 
        begin 
            set @pass='log' 
            set @msg='pass, operación sin modificación. ' 
            set @result= 1 
            goto logg 
        end 
    --3.2 Obtener permisos 
      select @Edit=[CanEdit] 
       --otros permisos omitidos
      donde [Url] como '%/'+@module+'/%' y roleid=@roleid 

    
--4 Juzgando si hay permiso 
    if (charindex('Submit',@optype,0)>0--dialog envío de formulario único 
        o @optype='savePOBill' --documento guardado 
         
            si(@Edit=1)--editable 
                begin 
                    set @result= 1 
             
                end 
            else 
            begin 
                set @result=0 
                 goto logg 
            end 
        end   
      ---Se omitió otra verificación de permisos 
    ... . .... 

    de lo contrario 
        establecer @result=0-- de lo contrario rechazar rechazar     
        
        
        
        

if(@result=1) 
    establecer @pass='pass' 

--5 log logg 
: 
if(@result=0) 
    establecer @msg='no autorizado para realizar la operación actual'+@optype 
  insertar en sys_aoplog ([ código] 
      ,[nombre] 
      ,[uri]
      ,[verifyresult], module,[page],optype,remark) valores (@userID,@pageName,@URI,@pass,@module,@page,@optype,@msg) --6 返回结果
return 
    @result 
END

El front-end llama al procedimiento almacenado para la autenticación.

  //判断权限
                   bool purCheck= dataOperate.ExeAopProc(aurl, currentUser.UserID.ToString(), out purMsg); 
                   if (!purCheck) 
                   { 
                       string jsonlist1 = Common.ExtAjaxRequest.GetOperateRet("0", purCheck, purMsg); 
                       Respuesta.Escribir(jsonlist1); 
                       Respuesta.End(); 
                   }

Efecto:

registro de antecedentes

rebajar.

Supongo que te gusta

Origin blog.csdn.net/sinat_40572875/article/details/129758420
Recomendado
Clasificación