11namespace FSharp.Data.GraphQL.Samples.StarWarsApi.Authorization
22
3+ open System.Threading .Tasks
34open FSharp.Core
45open Microsoft.AspNetCore .Authorization
56
67module Policies =
78
9+ let [<Literal>] Dummy = " Dummy"
810 let [<Literal>] CanSetMoon = " CanSetMoon"
911
12+ type DummyRequirement () = interface IAuthorizationRequirement
13+
14+ type DummyHandler () =
15+
16+ inherit AuthorizationHandler< DummyRequirement> ()
17+
18+ override _.HandleRequirementAsync ( context , requirement ) =
19+ context.Succeed requirement
20+ Task.CompletedTask
21+
1022type IsCharacterRequierment ( character : string Set ) =
1123 member val Characters = character
1224 interface IAuthorizationRequirement
@@ -15,12 +27,12 @@ type IsCharacterHandler () =
1527
1628 inherit AuthorizationHandler< IsCharacterRequierment> () // Inject services from DI
1729
18- override _.HandleRequirementAsync ( context , requirement ) =
19- Async.StartImmediateAsTask( async {
20- let allowedCharacters = requirement.Characters
21- if context.User.Claims
22- |> Seq.where ( fun c -> c.Type = " character" )
23- |> Seq.exists ( fun c -> allowedCharacters |> Set.contains c.Value)
24- then context.Succeed requirement
25- else () // Go to the next handler if registered
26- }) :> _
30+ override _.HandleRequirementAsync ( context , requirement ) =
31+ Async.StartImmediateAsTask( async {
32+ let allowedCharacters = requirement.Characters
33+ if context.User.Claims
34+ |> Seq.where ( fun c -> c.Type = " character" )
35+ |> Seq.exists ( fun c -> allowedCharacters |> Set.contains c.Value)
36+ then context.Succeed requirement
37+ else () // Go to the next handler if registered
38+ }) :> _
0 commit comments