- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
。
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 AS BEGIN declare @roleid as int -- 角色ID declare @location as int -- DataStore/ 的位置 declare @moduleAndPage as nvarchar ( 200 ) -- 模块/页面及请求参数 declare @module as nvarchar ( 50 ) -- 模块 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 = ' 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 ] --其它权限省略 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 @result END
。
前端调用存储过程进行鉴权 。
// 判断权限 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效果的文章就讲到这里了,如果你想了解更多关于C#+SQL存储过程实现系统数据权限审查AOP效果的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在运行一个辅助角色,并检查 Azure 上托管的存储中是否存在数据。当我将连接字符串用于经典类型的存储时,我的代码可以正常工作,但是当我连接到 V2 Azure 存储时,它会抛出此异常。 “远程服
在我的应用程序的主页上,我正在进行 AJAX 调用以获取应用程序各个部分所需的大量数据。该调用如下所示: var url = "/Taxonomy/GetTaxonomyList/" $.getJSO
大家好,我正在尝试将我的商店导入我的 Vuex Route-Gard。 路由器/auth-guard.js import {store} from '../store' export default
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我正在使用 C# 控制台应用程序 (.NET Core 3.1) 从 Azure Blob 存储读取大量图像文件并生成这些图像的缩略图。新图像将保存回 Azure,并将 Blob ID 存储在我们的数
我想将 Mlflow 设置为具有以下组件: 后端存储(本地):在本地使用 SQLite 数据库存储 Mlflow 实体(run_id、params、metrics...) 工件存储(远程):使用 Az
我的 Windows 计算机上的本地文件夹中有一些图像。我想将所有图像上传到同一容器中的同一 blob。 我知道如何使用 Azure Storage SDKs 上传单个文件BlockBlobServi
我尝试发出 GET 请求来获取我的 Azure Blob 存储帐户的帐户详细信息,但每次都显示身份验证失败。谁能判断形成的 header 或签名字符串是否正确或是否存在其他问题? 代码如下: cons
这是用于编写 JSON 的 NeutralinoJS 存储 API。是否可以更新 JSON 文件(推送数据),而不仅仅是用新的 JS 对象覆盖数据。怎么做到的??? // Javascript
我有一个并行阶段设置,想知道是否可以在嵌套阶段之前运行脚本,所以像这样: stage('E2E-PR-CYPRESS') { when { allOf {
我想从命令行而不是从GUI列出VirtualBox VM的详细信息。我对存储细节特别感兴趣。 当我在GUI中单击VM时,可以看到包括存储部分在内的详细信息: 但是到目前为止,我还没有找到通过命令行执行
我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 来递归检查所有节点及其上游组件,只要上游路径没有 fork
谁能告诉我 jquery data() 在哪里存储数据以及何时删除以及如何删除? 如果我用它来存储ajax调用结果,会有性能问题吗? 例如: $("body").data("test", { myDa
有人可以建议如何为 Firebase 存储中的文件设置备份。我能够备份数据库,但不确定如何为 firebase 存储中的文件(我有图像)设置定期备份。 最佳答案 如何进行 Firebase 存储的本地
我最近开始使用 firebase 存储和 firebase 功能。现在我一直在开发从功能到存储的文件上传。 我已经让它工作了(上传完成并且文件出现在存储部分),但是,图像永远保持这样(永远在右侧加载)
我想只允许用户将文件上传到他们自己的存储桶中,最大文件大小为 1MB,仍然允许他们删除文件。我添加了以下内容: match /myusers/{userId}/{allPaths=**} { al
使用生命周期管理策略将容器的内容从冷访问层移动到存档。我正在尝试以下策略,希望它能在一天后将该容器中的所有文件移动到存档层,但事实并非如此在职的。我设置了选择标准“一天未使用后”。 这是 json 代
对于连接到 Azure 存储端点,有 http 和 https 两个选项。 第一。 https 会带来开销,可能是 5%-10%,但我不支付同一个数据中心的费用。 第二。 http 更快,但 Auth
有人可以帮我理解这一点吗?我创建了Virtual Machine in Azure running Windows Server 2012 。我注意到 Azure 自动创建了一个存储帐户。当我进入该存
我是一名优秀的程序员,十分优秀!