自定义WebApi授权数据库调用

2024-06-19

我正在尝试确定我编写的自定义授权属性是否确实是一个好主意。

Scenario
假设我们有一系列商店,每个商店Store有一个主人。只有商店的所有者才能对商店进行CRUD操作。除了具有Claim这基本上超越了所有权要求,并表示他们可以在任何商店上进行 CRUD 操作。

旁注:我正在使用 Thinktecture 和 ADFS

所以我做了一个StoreOwnerAuthorize属性 who 的参数("Manage", "Stores")用于检查用户是否有适当的声明来“覆盖”不是所有者但仍然能够通过授权检查。

我不确定对于拥有“ManageStores”之类的声明并在属性内进行数据库调用有何感受。这让我觉得我走错了路,尽管它确实实现了我所需要的。

API 路由

api/v1/Store/{storeId:int:min(1)}/employees   
api/v1/Store/{storeId:int:min(1)}/inventory 

接口方法

[StoreOwnerAuthorize("Manage", "Stores")]
[ResourceAuthorize("View", "Store")]
[Route("")]
//api/v1/Store/{storeId:int:min(1)}/employees 
public IHttpActionResult GetStoreEmployees(int storeId)
{
    return Ok(collectionOfStoreEmployees);
}

店主授权属性

public class StoreOwnerAuthorizeAttribute : ResourceAuthorizeAttribute
{
    private readonly DbContext _context = new DbContext();

    public StoreOwnerAuthorizeAttribute(){  }
    public StoreOwnerAuthorizeAttribute(string action, params string[] resources)
        : base(action, resources) { }

    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        //If the user has the Claim that overrides the requirement that the user 
        //is the Owner of the Store, skip checking if they are the owner
        if (base.IsAuthorized(actionContext))
            return true;

        //Get route parameter to lookup Store and determine if the user is the owner
        object storeId;
        actionContext.ControllerContext.RouteData.Values.TryGetValue("storeId", out storeId);
        var isOwner = false;
        if (storeId != null)
        {
            isOwner =
                _context.Store_Get_ByStoreID(int.Parse(storeId.ToString()))
                    .Any(x => x.OwnerId == theUser.Id());
        }
        return isOwner;
    }
}

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

自定义WebApi授权数据库调用 的相关文章

  • 使用迭代器时无限循环

    Set key1 map keySet Iterator it1 key1 iterator int cnt 0 while it1 hasNext cnt 这段代码导致无限循环的可能性有多大 实际上这会导致无限循环 我怀疑是因为我没有服用
  • 在php中获取二进制数据大小的正确方法是什么?

    我已阅读文件的一部分 现在想确保该部分的大小正确 我怎样才能在 php 中做到这一点 part fread file 1024 return some function part 1024 我已经阅读了这些示例 但我怀疑是否要使用 strl
  • 记录使用 OpenAL 播放的样本

    我在 iOS 上使用 OpenAL 同时播放 9 个循环 为了使循环 100 同步 它们开始在不同的线程上运行 有关使用 OpenAL 记录正在播放的内容的任何指示 教程 如果我使用不同的线程 我会遇到录制问题吗 iOS 上的 OpenAL
  • 并行运行 Angular 和 AngularJS 框架

    我找到了描述如何将 Angular 2 组件集成到 AngularJS 中的资源 但所有这些都涉及像 Angular 项目一样设置 AngularJS 项目 需要 TypeScript 的转译器 需要 ES6 需要 import 语句 我想
  • 父元素的 mousedown 事件中的 offsetX 和 offsetY 错误

    我在 mousedown 上获取 offsetX 时遇到问题 下面是我的代码 div Click the text The mouseDown function is triggered when the mouse button is p
  • Qt 按键事件 Enter

    void LoginModle keyPressEvent QKeyEvent event qDebug lt lt event gt key lt lt t lt lt Qt Key Enter lt lt t lt lt QKeyEve
  • 为什么 java.io.File 没有 close 方法?

    While java io RandomAccessFile确实有一个close method java io File没有 这是为什么 文件在完成时会自动关闭吗 javadoc 的Fileclass 将该类描述为 文件和目录路径名的抽象表
  • JHipster:使用标准过滤实体 - 预期的 Angular 客户端方法

    我最近开始使用JHipster http www jhipster tech 感谢这个出色项目的维护者 在 JHipster 的当前版本 撰写本文时为 4 10 2 中 实体可以通过实体子生成器启用过滤 或者通过包含filter Entit
  • Vimscript:如何获取正在运行 Vim 的操作系统?

    我有一个 vim 插件 可以在不同的机器上运行 有时需要根据 Windows Linux Mac 执行不同的操作 测试操作系统最简单的方法是什么 我知道我可以解析 version 命令的输出 有没有更简单的东西可以揭示操作系统 来自谷歌 您
  • 哪种 LaTeX 包与 knit 一起使用以获得更多的表格控制?禁忌?

    我正在用 knitr 写一张更长的桌子xtable和tabular environment longtable 在 longtable 包中时print将它们纳入我的 Rnw file 问题是我对longtable环境控制不够 我有一些文本
  • MVC 4 Razor 如果拆分 div 标签

    我有以下 MVC 4 Razor 代码 for int i 1 i lt 100 i if currentCol 1 Html Raw div class row Need to do this because can t have a o
  • LISP - 破坏性和非破坏性构造

    正确的定义是什么破坏性的 and 非破坏性的在 LISP 或一般情况下 中构造 我试图寻找真正的含义 但我只发现了这些术语的很多用法 而没有真正解释它们 据我了解 通过破坏性的函数是指一个函数 它改变构造 或变量 的含义 所以当我将一个列表
  • 最大方法名称长度

    有谁知道您选择的编程语言中方法名称的最大长度是多少 我本来打算将此作为一个 C 特定问题 但我认为了解整个范围会很好 还涉及哪些因素 语言规范对此有限制吗 What does the compiler limit it to 32 位和 6
  • html 中的图像按钮

    我正在尝试获取一个带有图像的按钮 我见过类似下面的东西 但它们不会为您提供普通按钮所具有的按钮按下 释放效果
  • 使用 Jest 测试来自 React-router v4 的链接

    我在用着jest测试一个组件从反应路由器 v4 开始 我收到警告需要来自反应路由器的上下文
  • Angular2 中的 MVW 代表什么?

    我有很多介绍 MVC MVP MVVM 等的链接 但我没有得到一个可以说明 M 在 Angular2 中到底代表什么 V 在 Angular2 中到底代表什么以及 W 在 Angular2 中到底代表什么的信息 也许W有一个答案 那就是W代
  • 将表与同一个表的前一条记录连接起来

    我有一个包含历史记录的表 由主表中的多个触发器发布到那里 我想在历史表上创建一个 select 语句 其中每个记录都由其先前的记录 由相同的 LineID 和最高的 ActionDate 标识 连接 这样我就可以提取这两者之间的差异 我尝试
  • 我可以更改 LongListMultiSelector 中的复选框颜色吗? WP8

    我需要更改 Windows Phone 8 中 LongListMultiSelector 复选框的颜色 因为我的背景是白色 这可能吗 Thanks 为此 您必须首先通过在 Visual Studio 中的文档大纲中右键单击长列表选择器来编
  • 国家/地区的下拉菜单

    您好 我想为国家和州实现下拉菜单 州下拉列表应根据所选国家 地区更改其值 有没有任何插件或 gem 可以在 Rails 中执行此操作 尝试卡门插件 http autonomousmachine com posts 2009 4 1 carm
  • 从 C# 调用 C++ DLL

    我想使用 C 中的 C DLL C DLL 是win32 控制台应用程序 我已成功调用它 并希望在 C 中处理来自 C 的数据 然而 C 应用程序在执行 DLL 后退出 即这一行 GetArrayFromDLL 我是 C 和 Visual

随机推荐

  • 找到不固定长度的数字的所有可能排列以达到给定的总和或乘积

    使用普通 Python 或任何 Python 库 您将如何查找列表中元素的所有可能组合l等于给定值val using addition 减法 or 乘法 假设列表的长度并不总是相同 假设列表中的每个元素在每个组合中只能使用一次 并假设没有使
  • RSA 已处置对象错误 - 所有其他测试

    我们有几个测试生成 jwt 请求来调用服务器来检索令牌 我们有 6 个测试 使用相同的数据对相同的方法进行相同的调用 方法如下 private static string GenerateSignedTokenRequest string
  • 为什么我在 Windows 上使用 async 和 wait 时会收到 NotImplementedError 错误?

    我有这个代码 import os import time import asyncio async def run command args Example from http asyncio readthedocs io en lates
  • 如何使用 Nginx 将下划线替换为破折号

    我第一次使用Nginx 对它基本上一无所知 我需要将 100 多个 URL 中的 替换为 我想一定有一种简单的方法可以用 Nginx 来做到这一点 但在 Google 上找不到任何东西 Thanks Edit 我的网址例如 http www
  • 为什么我会遇到分段错误?

    我只想创建一个简单的 C 结构 它有一个 int 索引和一个 int greyValue 该函数被赋予带有灰度值的向量 当我尝试编译它时 出现分段错误 有人知道为什么吗 没有对向量进行排序 谢谢 vector
  • Xcode 6 仪器冻结

    在 Xcode 6 Instruments 中分析我的 iOS 8 应用程序将运行该应用程序约 5 秒 然后冻结 此后探查器仍将运行 但应用程序已冻结且无法使用 发生在设备和模拟器上 无论我使用哪个分析器 计时器 泄漏等 从调试器或临时构建
  • AngularJS 指令的完整列表?

    我正在学习 AngularJS 是否有所有开箱即用指令的完整列表 这FAQ http docs angularjs org misc faq提及ng repeat ng show and ng class 但我感觉还有更多 奇怪的是我找不到
  • Typescript 生成带有“#private;”字段的声明 d.ts 文件

    我有一个用 Typescript 编写的库 它分布在 2 个文件中 一个已编译的 ECMAScript 2015 兼容 Javascript 文件index js和一个 Typescript 声明文件index d ts 我的目标是让 Ja
  • 在 .Net 中创建 EPUB

    有没有可以用来在 NET C 中创建 epub 文件的库 Flowdocument gt epub 转换工具将是理想的选择 但任何类型的库都很棒 我还对评估编写一个程序的复杂程度感兴趣 我知道它基本上是一堆压缩的 XHTML 文件 但我不断
  • AWK数组初始化

    是否可以使用常见的方法在AWK中初始化数组list syntax array val1 val2 val3 或者是否必须使用索引值 syntax array 0 val1 array 1 val2 array 2 val3 不 不 您可以这
  • libmysqlclient.a 和 libmysqlclient_r.a 有什么区别?

    我应该使用哪个来链接 mysqlclient 库 它们之间有什么区别 我似乎找不到答案 谢谢 较新版本的 MySQL 客户端发行版不包含 r 版本 有些可能有从 libmyqslclient r a 到 libmyqslclient a 的
  • Java 中查看 ArrayList 是否包含对象的最有效方法

    我有一个 Java 对象的 ArrayList 这些对象有四个字段 我用其中两个字段来将对象视为与另一个对象相等 我正在寻找最有效的方法 给定这两个字段 以查看数组是否包含该对象 问题在于这些类是基于 XSD 对象生成的 因此我无法修改类本
  • SVN错误155009:无法运行WC DB工作\无法打开文件\系统找不到指定的文件

    I found 信息贫乏 https www google com webhp q 22Failed 20to 20run 20the 20WC 20DB 20work 20queue 20associated 20with 22 20 2
  • 本地主机中的 Ansible SSH 连接错误

    当我针对本地主机启动我的剧本时 出现此错误 TASK setup fatal 127 0 0 1 UNREACHABLE gt changed false msg SSH encountered an unknown error durin
  • 罗莎琳德《孟德尔第一定律》 IPRB

    作为即将到来的生物信息学课程的准备 我正在做一些来自 rosalind info 的作业 我目前正陷入任务 孟德尔第一定律 http rosalind info problems iprb 我想我可以用蛮力强迫自己解决这个问题 但不知怎的
  • 如何在 IE 中检测开窗器

    我在堆栈上找不到任何好的答案 它们与对话框 文本编辑器有关 并且有人使用 VBScript 我需要向开窗器发送消息 这在 FF Chrome 和 Opera 中运行良好 但是window opener在 IE8 10 中为空 我在用wind
  • 删除网格 Tkinter 中的某些行/列

    如果我在同一框架中有多个行和列 并且有多个条目 标签小部件 是否可以仅选择其中一个并将其删除 同时保留其他小部件 e g class Window def init self self root Tk self win1 Frame sel
  • Rails 4 - 每次运行 rake db:migrate 命令时,rake 命令都会显示弃用警告

    pinterestclone rake db migrate DEPRECATION WARNING Sprockets method register engine is deprecated Please register a mime
  • 在 Windows 7 上连接到高于 10 的 COM 端口时出现无效句柄错误

    我开发了一个简单的串行端口应用程序 可以在低于 10 的 COM 端口 COM9 COM8 COM1 上正常工作 但是 当我的设备连接到高于 10 的端口 例如 COM11 时 它无法连接 并且我收到 INVALID HANDLE 我的代码
  • 自定义WebApi授权数据库调用

    我正在尝试确定我编写的自定义授权属性是否确实是一个好主意 Scenario假设我们有一系列商店 每个商店Store有一个主人 只有商店的所有者才能对商店进行CRUD操作 除了具有Claim这基本上超越了所有权要求 并表示他们可以在任何商店上