首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保护多个参数化页

保护多个参数化页
EN

Stack Overflow用户
提问于 2012-02-24 04:49:52
回答 1查看 209关注 0票数 4

示例sitelet项目模板显示了如何保护单个非参数化页面。我在谷歌上搜索了一下,浏览过WebSharper的网站等等,也不知道如何保护多个参数化页面。有人能告诉我,或者指给我一个如何做到这一点的例子吗?

EN

回答 1

Stack Overflow用户

发布于 2012-05-31 15:55:18

这个问题最近再次出现在FPish上。似乎有一个简单的解决方案不需要大量重构。不过,它需要一种辅助功能:

代码语言:javascript
运行
复制
module Sitelet =

  let Filter (ok: 'T -> bool) (sitelet: Sitelet<'T>) =
    let route req =
        match sitelet.Router.Route(req) with
        | Some x when ok x -> Some x
        | _ -> None
    let link action =
        if ok action then
            sitelet.Router.Link(action)
        else None
    { sitelet with Router = Router.New route link }

假设您有一个包含几个案例的Action类型,其中一些是您想要保护的,还有一些是公共的:

代码语言:javascript
运行
复制
type Action =
    | Pub ..
    | Priv ..

过滤允许您在完整类型上使用方便的Infer组合器,然后安全地将受保护的部分和公共部分相加。由于总结性的站点是从左到右的,所以保护只适用于需要的地方:

代码语言:javascript
运行
复制
let s1 =
    Sitelet.Infer ..
    |> Sitelet.Protect
    |> Sitelet.Filter (function Priv _ -> true | _ -> false)
let s2 = Sitelet.Infer ..
Sitelet.Sum [s1; s2]

不进行过滤,受保护的站点将捕获所有请求。对此,可能还有其他解决方案,包括重构Action类型并将其拆分为几个子类型,或者不使用Infer手工编写一个站点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9425571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档