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.