@@ -53,6 +53,7 @@ internal void InitializePermissions(int parameterCount, OperationSemantic[] sema
53
53
54
54
var i = 0 ;
55
55
foreach ( var permissionFactory in _permissionFactories )
56
+ {
56
57
foreach ( var semantic in semantics )
57
58
{
58
59
_permissions [ i ] = new OperationPermission < IPermission > ( semantic , permissionFactory . ParameterIndex ,
@@ -61,6 +62,7 @@ internal void InitializePermissions(int parameterCount, OperationSemantic[] sema
61
62
_hasPermissionForParameter [ permissionFactory . ParameterIndex ] = true ;
62
63
i ++ ;
63
64
}
65
+ }
64
66
}
65
67
66
68
/// <summary>
@@ -89,43 +91,60 @@ internal bool HasPermissionForParameter(int parameterIndex)
89
91
internal void RequirePermission ( MemberInfo member , OperationSemantic semantic , int parameterIndex , object securable )
90
92
{
91
93
if ( evaluatingPermissions )
94
+ {
92
95
return ;
96
+ }
93
97
94
98
if ( SecurityContext . Current == null )
99
+ {
95
100
return ;
101
+ }
96
102
97
103
var subject = SecurityContext . Current . Subject ;
98
104
var policy = SecurityContext . Current . Policy ;
99
105
100
106
if ( policy == null )
107
+ {
101
108
return ;
102
-
109
+ }
103
110
104
111
try
105
112
{
106
113
evaluatingPermissions = true ;
107
114
108
115
foreach ( var permission in _permissions )
116
+ {
109
117
if ( ( permission . Semantic == OperationSemantic . Default || permission . Semantic == semantic ) &&
110
118
permission . ParameterIndex == parameterIndex )
119
+ {
111
120
if ( ! policy . Evaluate ( subject , permission . Permission , securable ) )
112
121
{
113
122
SecurityContext . Current . ExceptionHandler ? . OnSecurityException ( member , semantic , securable ,
114
123
SecurityContext . Current . Subject , permission . Permission ) ;
115
124
116
125
string memberKind ;
117
126
if ( member is FieldInfo )
127
+ {
118
128
memberKind = "field" ;
129
+ }
119
130
else if ( member is PropertyInfo )
131
+ {
120
132
memberKind = "property" ;
133
+ }
121
134
else if ( member is MethodBase )
135
+ {
122
136
memberKind = "method" ;
137
+ }
123
138
else
139
+ {
124
140
throw new ArgumentOutOfRangeException ( nameof ( member ) ) ;
141
+ }
125
142
126
143
throw new SecurityException (
127
144
$ "Cannot { semantic . ToString ( ) . ToLowerInvariant ( ) } the { memberKind } { member . DeclaringType . Name } .{ member . Name } : the subject '{ subject . Name } ' does not have the { permission . Permission . Name } permission on the object '{ securable } '.") ;
128
145
}
146
+ }
147
+ }
129
148
}
130
149
finally
131
150
{
0 commit comments