【问题标题】:Do not allow Expands for specific EntityTypes in Breeze不允许在 Breeze 中扩展特定实体类型
【发布时间】:2013-02-01 21:53:05
【问题描述】:

我正在寻找一种优雅的方式来不允许特定 EntityTypes 在 BreezeJS 中成为 expanded。我们有一个(有点)要公开的公共 Web 服务,并且有一些表我们不希望对该服务的某些消费者可见。虽然我们只能为那些特定的表公开 Web API 方法,但服务的使用者仍然可以通过从相关表扩展来访问这些表。

注意:我已经发布了这个问题的答案,给出了解决方法。不过,如果有人知道给这只特殊猫剥皮的更优雅的方法,我很感兴趣。

【问题讨论】:

    标签: entity-framework asp.net-web-api odata breeze


    【解决方案1】:

    UserVoice page for requesting this feature to be formally added to Breeze 上,Ward Bell 提出了一个不错的解决方法:

    同时,在您的控制器中,您可以检查请求中的查询字符串是否存在 $select 和 $expand,如果看到则抛出异常。

    我猜这看起来像这样:

        [HttpGet]
        public IQueryable<Widget> Widgets() {
            if (!string.IsNullOrEmpty(HttpContext.Current.Request.QueryString["$expand"]))
            {
                throw new Exception("Ah ah ah, you didn't say the magic word!");
            }
            return _contextProvider.Context.Widgets;
        }
    

    ...阻止所有扩展,或者更具体的阻止功能扩展本身。这不是太破旧,但不是很“优雅”。

    (是的,那是Jurassic Park reference。)

    【讨论】:

    • 感谢您发布此信息。这是绝对正确的。我真的希望上面提到的 UserVoice 请求能获得额外的投票。我认为这也是一个非常有用的功能。
    • 一旦您获得了身份验证和授权,您就可以添加限制较少的仅对授权用户可用的查询方法。这些操作方法只是从客户端查询的其他资源(例如,EntityQuery.from('EmployeesForAdmins'))。在服务器上,它们受到授权逻辑的保护……然后被允许做更多事情。这只是你腰带上的另一个工具。
    • 更优雅的解决方案可能是将这个逻辑封装在一个属性中,该属性可以放置在控制器上(应用于所有方法)或单个方法上。不会很难。我只需要吸吮它并做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2010-11-01
    • 1970-01-01
    • 2014-09-14
    相关资源
    最近更新 更多