tgstation-server 6.19.0
The /tg/station 13 server suite
Loading...
Searching...
No Matches
AuthorityInvokerBase{TAuthority}.cs
Go to the documentation of this file.
1using System;
2using System.Linq;
3using System.Threading.Tasks;
4
5using Microsoft.AspNetCore.Authorization;
6
8{
10 abstract class AuthorityInvokerBase<TAuthority> : IAuthorityInvoker<TAuthority>
11 where TAuthority : IAuthority
12 {
16 protected TAuthority Authority { get; }
17
22
29 TAuthority authority,
30 Security.IAuthorizationService authorizationService)
31 {
32 Authority = authority ?? throw new ArgumentNullException(nameof(authority));
33 this.authorizationService = authorizationService ?? throw new ArgumentNullException(nameof(authorizationService));
34 }
35
37 async ValueTask<IQueryable<TResult>?> IAuthorityInvoker<TAuthority>.InvokeQueryable<TResult>(Func<TAuthority, RequirementsGated<IQueryable<TResult>>> authorityInvoker)
38 {
39 ArgumentNullException.ThrowIfNull(authorityInvoker);
40
41 var requirementsGate = authorityInvoker(Authority);
42 return await ExecuteIfRequirementsSatisfied(requirementsGate);
43 }
44
51 protected async ValueTask<TResult?> ExecuteIfRequirementsSatisfied<TResult>(RequirementsGated<TResult> requirementsGate)
52 where TResult : class
53 {
54 var requirements = await requirementsGate.GetRequirements();
55 var authorizationResult = await authorizationService.AuthorizeAsync(requirements, requirementsGate.InstanceId);
56
57 if (!authorizationResult.Succeeded)
58 {
59 OnRequirementsFailure(authorizationResult.Failure);
60 return null;
61 }
62
63 return await requirementsGate.Execute(authorizationService);
64 }
65
70 protected virtual void OnRequirementsFailure(AuthorizationFailure authFailure)
71 {
72 }
73 }
74}
readonly Security.IAuthorizationService authorizationService
The authorization service for the AuthorityInvokerBase<TAuthority>.
virtual void OnRequirementsFailure(AuthorizationFailure authFailure)
Called to handle generic behavior when requirements evaluation fails.
AuthorityInvokerBase(TAuthority authority, Security.IAuthorizationService authorizationService)
Initializes a new instance of the AuthorityInvokerBase<TAuthority> class.
async ValueTask< TResult?> ExecuteIfRequirementsSatisfied< TResult >(RequirementsGated< TResult > requirementsGate)
Unwrap a RequirementsGated<TResult> result, returning null if the requirements weren't satisfied.
Evaluates a set of IAuthorizationRequirements to be checked before executing a response.
Business logic for interating with the server.
Definition IAuthority.cs:9
Interface for evaluating IAuthorizationRequirements.