@@ -141,5 +141,49 @@ public static string FindClientId(this IIdentity identity)
141141 }
142142
143143 #endregion
144+
145+ #region Add(添加)
146+
147+ /// <summary>
148+ /// 添加。如果不存在指定声明,则进行添加
149+ /// </summary>
150+ /// <param name="claimsIdentity">声明标识</param>
151+ /// <param name="claim">声明</param>
152+ public static ClaimsIdentity AddIfNotContains ( this ClaimsIdentity claimsIdentity , Claim claim )
153+ {
154+ Check . NotNull ( claimsIdentity , nameof ( claimsIdentity ) ) ;
155+ if ( ! claimsIdentity . Claims . Any ( x => string . Equals ( x . Type , claim . Type , StringComparison . OrdinalIgnoreCase ) ) )
156+ claimsIdentity . AddClaim ( claim ) ;
157+ return claimsIdentity ;
158+ }
159+
160+ /// <summary>
161+ /// 添加或替换。如果指定声明不存在直接添加,否则进行替换
162+ /// </summary>
163+ /// <param name="claimsIdentity">声明标识</param>
164+ /// <param name="claim">声明</param>
165+ public static ClaimsIdentity AddOrReplace ( this ClaimsIdentity claimsIdentity , Claim claim )
166+ {
167+ Check . NotNull ( claimsIdentity , nameof ( claimsIdentity ) ) ;
168+ foreach ( var x in claimsIdentity . FindAll ( claim . Type ) . ToList ( ) )
169+ claimsIdentity . RemoveClaim ( x ) ;
170+ claimsIdentity . AddClaim ( claim ) ;
171+ return claimsIdentity ;
172+ }
173+
174+ /// <summary>
175+ /// 添加。如果不存在指定声明标识,则进行添加
176+ /// </summary>
177+ /// <param name="principal">声明主体</param>
178+ /// <param name="identity">声明标识</param>
179+ public static ClaimsPrincipal AddIdentityIfNotContains ( this ClaimsPrincipal principal , ClaimsIdentity identity )
180+ {
181+ Check . NotNull ( principal , nameof ( principal ) ) ;
182+ if ( ! principal . Identities . Any ( x => string . Equals ( x . AuthenticationType , identity . AuthenticationType , StringComparison . OrdinalIgnoreCase ) ) )
183+ principal . AddIdentity ( identity ) ;
184+ return principal ;
185+ }
186+
187+ #endregion
144188 }
145189}
0 commit comments