2
using System.Collections.Generic;
4
namespace ServiceStack.ServiceHost
7
/// Used to decorate Request DTO's to alter the behaviour of a service.
9
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
10
public class ServiceAttribute
14
/// Sets a single access restriction
16
/// <value>The restrict access to.</value>
17
public EndpointAttributes RestrictAccessTo
21
return this.RestrictAccessToScenarios.Length == 0
22
? EndpointAttributes.All
23
: this.RestrictAccessToScenarios[0];
27
this.RestrictAccessToScenarios = new[] { value };
32
/// Set multiple access scenarios
34
/// <value>The restrict access to scenarios.</value>
35
public EndpointAttributes[] RestrictAccessToScenarios { get; private set; }
37
public int? Version { get; set; }
39
public ServiceAttribute()
41
this.RestrictAccessToScenarios = new EndpointAttributes[0];
44
public ServiceAttribute(params EndpointAttributes[] restrictAccessToScenarios)
47
if (restrictAccessToScenarios.Length == 0)
49
this.RestrictAccessTo = EndpointAttributes.All;
53
var scenarios = new List<EndpointAttributes>();
54
foreach (var restrictAccessToScenario in restrictAccessToScenarios)
56
var restrictAccessTo = EndpointAttributes.None;
59
if (!HasAnyRestrictionsOf(restrictAccessToScenario, EndpointAttributes.AllNetworkAccessTypes))
61
restrictAccessTo |= EndpointAttributes.AllNetworkAccessTypes;
65
restrictAccessTo |= (restrictAccessToScenario & EndpointAttributes.AllNetworkAccessTypes);
69
if (!HasAnyRestrictionsOf(restrictAccessToScenario, EndpointAttributes.AllSecurityModes))
71
restrictAccessTo |= EndpointAttributes.AllSecurityModes;
75
restrictAccessTo |= (restrictAccessToScenario & EndpointAttributes.AllSecurityModes);
79
if (!HasAnyRestrictionsOf(restrictAccessToScenario, EndpointAttributes.AllHttpMethods))
81
restrictAccessTo |= EndpointAttributes.AllHttpMethods;
85
restrictAccessTo |= (restrictAccessToScenario & EndpointAttributes.AllHttpMethods);
89
if (!HasAnyRestrictionsOf(restrictAccessToScenario, EndpointAttributes.AllCallStyles))
91
restrictAccessTo |= EndpointAttributes.AllCallStyles;
95
restrictAccessTo |= (restrictAccessToScenario & EndpointAttributes.AllCallStyles);
99
if (!HasAnyRestrictionsOf(restrictAccessToScenario, EndpointAttributes.AllEndpointTypes))
101
restrictAccessTo |= EndpointAttributes.AllEndpointTypes;
105
restrictAccessTo |= (restrictAccessToScenario & EndpointAttributes.AllEndpointTypes);
108
scenarios.Add(restrictAccessTo);
111
this.RestrictAccessToScenarios = scenarios.ToArray();
114
static bool HasAnyRestrictionsOf(EndpointAttributes allRestrictions, EndpointAttributes restrictions)
116
return (allRestrictions & restrictions) != 0;
119
public ServiceAttribute(int version, params EndpointAttributes[] restrictAccessScenarios)
120
: this(restrictAccessScenarios)
122
this.Version = version;
125
public bool HasNoAccessRestrictions
129
return this.RestrictAccessTo == EndpointAttributes.All;
b'\\ No newline at end of file'