{"id":68351,"date":"2024-07-06T12:19:46","date_gmt":"2024-07-06T08:49:46","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k\/"},"modified":"2024-07-06T12:19:46","modified_gmt":"2024-07-06T08:49:46","slug":"creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k\/","title":{"rendered":"\u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 Umbraco Backoffice Accessor \u0628\u0631\u0627\u06cc \u0631\u0646\u062f\u0631 \u0635\u0641\u062d\u0647 \u0645\u0634\u0631\u0648\u0637"},"content":{"rendered":"<p>Summarize this content to 400 words in Persian Lang <\/p>\n<p>  \u0645\u0639\u0631\u0641\u06cc<\/p>\n<p>Umbraco \u06cc\u06a9 CMS \u0645\u062d\u0628\u0648\u0628 \u0627\u0633\u062a \u06a9\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0634\u062e\u0635\u06cc \u0633\u0627\u0632\u06cc \u0648 \u0627\u0645\u0646\u06cc\u062a\u06cc \u06af\u0633\u062a\u0631\u062f\u0647 \u0627\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u06cc\u06a9\u06cc \u0627\u0632 \u062c\u0646\u0628\u0647 \u0647\u0627\u06cc \u062d\u06cc\u0627\u062a\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0627\u06cc\u062a Umbraco \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u06a9\u0647 \u0641\u0642\u0637 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0628\u062e\u0634 \u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0627\u0632 \u0633\u0627\u06cc\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0645\u0627 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0628\u06a9 \u0622\u0641\u06cc\u0633 Umbraco \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u0634\u0631\u0648\u0637 \u0645\u062d\u062a\u0648\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>  \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<\/p>\n<p>\u062f\u0627\u0646\u0634 \u0627\u0648\u0644\u06cc\u0647 ASP.NET Core.<br \/>\n\u0646\u0635\u0628 Umbraco \u0645\u0648\u062c\u0648\u062f.  (\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f umbraco 13 \u0627\u06cc\u0646 \u0648\u0628\u0644\u0627\u06af \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f)<br \/>\n\u0648\u06cc\u0698\u0648\u0627\u0644 \u0627\u0633\u062a\u0648\u062f\u06cc\u0648 \u06cc\u0627 \u0647\u0631 C# IDE \u062f\u06cc\u06af\u0631.<\/p>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc Umbraco Backoffice User Accessor<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 Accessor \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062f\u0631 backoffice \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0645\u0631\u062d\u0644\u0647 1: \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc IBacofficeUserAccessor \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f\u0627\u06cc\u0646 \u0631\u0627\u0628\u0637 \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 backoffice \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<\/p>\n<p>using System.Security.Claims;<br \/>\nnamespace YourNamespace<br \/>\n{<br \/>\n\u00a0 \u00a0 public interface IBackofficeUserAccessor<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 ClaimsPrincipal BackofficeUser { get; }<br \/>\n\u00a0 \u00a0 }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u0636\u06cc\u062d:\u0627\u06cc\u0646 \u06a9\u062f \u0631\u0627\u0628\u0637\u06cc \u0628\u0647 \u0646\u0627\u0645 IBackofficeUserAccessor \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc BackofficeUser \u0627\u0632 \u0646\u0648\u0639 ClaimsPrincipal \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u0631\u0627\u0628\u0637 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<p>\u0645\u0631\u062d\u0644\u0647 2: \u06a9\u0644\u0627\u0633 BackofficeUserAccessor \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f\u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0631\u0627\u0628\u0637 IBackofficeUserAccessor \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 backoffice \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u0628\u0631\u062e\u06cc \u0627\u0632 \u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0628\u0647 \u062e\u0637\u0627\u0647\u0627\u06cc \u06af\u0632\u0627\u0631\u0634 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>using Microsoft.AspNetCore.Authentication.Cookies;<br \/>\nusing Microsoft.AspNetCore.Authentication;<br \/>\nusing Microsoft.Extensions.Options;<br \/>\nusing System.Security.Claims;<br \/>\nnamespace YourNamespace<br \/>\n{<br \/>\n\u00a0 \u00a0 public class BackofficeUserAccessor : IBackofficeUserAccessor<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 private readonly IOptionsSnapshot _cookieOptionsSnapshot;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 private readonly IHttpContextAccessor _httpContextAccessor;<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 private readonly ILogger _logger;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 public BackofficeUserAccessor(<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 IOptionsSnapshot cookieOptionsSnapshot,<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 IHttpContextAccessor httpContextAccessor,<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ILogger logger<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 )<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _cookieOptionsSnapshot = cookieOptionsSnapshot;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _httpContextAccessor = httpContextAccessor;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger = logger;\u00a0<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 public ClaimsIdentity BackofficeUser<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 get<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var httpContext = _httpContextAccessor.HttpContext;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (httpContext == null)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogWarning(&#8220;BackofficeAUserAccessor: HttpContext is null.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return new ClaimsIdentity();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 CookieAuthenticationOptions cookieOptions = _cookieOptionsSnapshot.Get(Umbraco.Cms.Core.Constants.Security.BackOfficeAuthenticationType);<\/p>\n<p>\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 string? backOfficeCookie = httpContext.Request.Cookies[cookieOptions.Cookie.Name!];<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (string.IsNullOrEmpty(backOfficeCookie))<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogWarning(&#8220;BackofficeAUserAccessor: BackOffice cookie is null or empty.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return new ClaimsIdentity();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 AuthenticationTicket? unprotected;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 try<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 unprotected = cookieOptions.TicketDataFormat.Unprotect(backOfficeCookie!);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 catch (Exception ex)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogError(ex, &#8220;BackofficeAUserAccessor: Failed to unprotect the BackOffice cookie.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return new ClaimsIdentity();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (unprotected == null)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogWarning(&#8220;BackofficeAUserAccessor: Unprotected authentication ticket is null.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return new ClaimsIdentity();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ClaimsIdentity? backOfficeIdentity = unprotected.Principal.GetUmbracoIdentity();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (backOfficeIdentity == null)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogWarning(&#8220;BackofficeAUserAccessor: BackOffice identity is null.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 else<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogInformation(&#8220;BackofficeAUserAccessor: User authenticated.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return backOfficeIdentity;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u0636\u06cc\u062d:<\/p>\n<p>\u0627\u0639\u0644\u0627\u0645\u06cc\u0647 \u06a9\u0644\u0627\u0633: \u06a9\u0644\u0627\u0633 BackofficeUserAccessor \u0631\u0627\u0628\u0637 IBackofficeUserAccessor \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0633\u0627\u0632\u0646\u062f\u0647: \u0633\u0627\u0632\u0646\u062f\u0647 IOptionsSnapshot \u0648 IHttpContextAccessor \u0631\u0627 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc \u06a9\u0648\u06a9\u06cc \u0648 \u0632\u0645\u06cc\u0646\u0647 HTTP \u0641\u0639\u0644\u06cc \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f.<\/p>\n<p>\u0648\u06cc\u0698\u06af\u06cc BackofficeUser: \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0632\u0645\u06cc\u0646\u0647 HTTP \u0641\u0639\u0644\u06cc \u062a\u0647\u06cc \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.  \u0627\u06af\u0631 \u0646\u0647\u060c \u06a9\u0648\u06a9\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a backoffice \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u062e\u0627\u0644\u06cc \u0628\u0648\u062f\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06af\u0631 \u06a9\u0648\u06a9\u06cc \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u062f\u060c \u0627\u0632 \u06a9\u0648\u06a9\u06cc \u0645\u062d\u0627\u0641\u0638\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0635\u0644 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06af\u0631 \u0646\u0647\u060c \u0627\u0635\u0644 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u062e\u0627\u0644\u06cc \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<p>\u0645\u0631\u062d\u0644\u0647 3: Accessor \u0631\u0627 \u062f\u0631 Program.cs \u062b\u0628\u062a \u06a9\u0646\u06cc\u062fBackofficeUserAccessor \u0631\u0627 \u062f\u0631 \u0638\u0631\u0641 \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<p>using InstallingUmbracoDemo;<br \/>\nusing Umbraco.Cms.Core.Services;<br \/>\nWebApplicationBuilder builder = WebApplication.CreateBuilder(args);<\/p>\n<p>\/\/ Register IHttpContextAccessor<br \/>\nbuilder.Services.AddHttpContextAccessor();<br \/>\n\/\/ Register the BackofficeUserAccessor<br \/>\nbuilder.Services.AddTransient();<\/p>\n<p>builder.CreateUmbracoBuilder()<br \/>\n\u00a0 \u00a0 .AddBackOffice()<br \/>\n\u00a0 \u00a0 .AddWebsite()<br \/>\n\u00a0 \u00a0 .AddDeliveryApi()<br \/>\n\u00a0 \u00a0 .AddComposers()<br \/>\n\u00a0 \u00a0 .Build();<br \/>\nWebApplication app = builder.Build();<br \/>\nawait app.BootUmbracoAsync();<br \/>\napp.UseUmbraco()<br \/>\n\u00a0 \u00a0 .WithMiddleware(u =&gt;<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseBackOffice();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseWebsite();<br \/>\n\u00a0 \u00a0 })<br \/>\n\u00a0 \u00a0 .WithEndpoints(u =&gt;<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseInstallerEndpoints();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseBackOfficeEndpoints();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseWebsiteEndpoints();<br \/>\n\u00a0 \u00a0 });<br \/>\nawait app.RunAsync();<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>  \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Backoffice User Accessor \u062f\u0631 \u06cc\u06a9 Controller and View<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 BackofficeUserAccessor \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0631 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0648 \u0646\u0645\u0627\u0647\u0627\u06cc \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u062d\u062a\u0648\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u0634\u0631\u0648\u0637 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0627\u0632 BackofficeUserAccessor \u062f\u0631 \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062fIBackofficeUserAccessor \u0631\u0627 \u0628\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u062e\u0648\u062f \u062a\u0632\u0631\u06cc\u0642 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>YourController.cs:<\/p>\n<p>using Microsoft.AspNetCore.Mvc;<br \/>\nnamespace YourNamespace.Controllers<br \/>\n{<br \/>\n\u00a0 \u00a0 public class YourController : Controller<br \/>\n\u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 private readonly IBackofficeUserAccessor _backofficeUserAccessor;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 public YourController(IBackofficeUserAccessor backofficeUserAccessor)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _backofficeUserAccessor = backofficeUserAccessor;<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 public IActionResult YourAction()<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (!_backofficeUserAccessor.BackofficeUser.IsAuthenticated)<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return Unauthorized(&#8220;You are not authorized to view this page.&#8221;);<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return View();<br \/>\n\u00a0 \u00a0 \u00a0 \u00a0 }<br \/>\n\u00a0 \u00a0 }<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u0636\u06cc\u062d:<\/p>\n<p>\u062a\u0632\u0631\u06cc\u0642 \u0633\u0627\u0632\u0646\u062f\u0647: \u06a9\u0644\u0627\u0633 YourController \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0627\u0632 IBackofficeUserAccessor \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0633\u0627\u0632\u0646\u062f\u0647 \u062e\u0648\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u0631\u0631\u0633\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a: \u062f\u0631 \u0631\u0648\u0634 YourAction\u060c \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 _backofficeUserAccessor \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u0634\u0648\u062f.  BackofficeUser.  \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a.  \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u062f\u060c \u0646\u062a\u06cc\u062c\u0647 \u063a\u06cc\u0631\u0645\u062c\u0627\u0632 \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f.  \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u060c \u0646\u0645\u0627 \u0631\u0627 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0627\u0632 BackofficeUserAccessor \u062f\u0631 \u06cc\u06a9 View \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u0627\u0632 IBackofficeUserAccessor \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0631 \u0646\u0645\u0627\u06cc Razor \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u0634\u0631\u0648\u0637 \u0645\u062d\u062a\u0648\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>YourView.cshtml:<\/p>\n<p>@inject YourNamespace.IBackofficeUserAccessor BackofficeUserAccessor<br \/>\n@if (BackofficeUserAccessor.BackofficeUser.IsAuthenticated)<br \/>\n{<br \/>\n\u00a0 \u00a0<br \/>\n\u00a0 \u00a0<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\n\u00a0 \u00a0<br \/>\n}<\/p>\n<p>    \u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/p>\n<p>    \u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/p>\n<p>\u062a\u0648\u0636\u06cc\u062d:\u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u062f\u0631 \u0646\u0645\u0627\u06cc: BackofficeUserAccessor \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 inject@ \u0628\u0647 view \u062a\u0632\u0631\u06cc\u0642 \u0645\u06cc \u0634\u0648\u062f.\u0631\u0646\u062f\u0631 \u0634\u0631\u0637\u06cc: \u0646\u0645\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 BackofficeUserAccessor \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.  BackofficeUser.  \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a.  \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u062f\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0631\u0627 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.  \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u060c \u067e\u06cc\u0627\u0645 \u063a\u06cc\u0631\u0645\u062c\u0627\u0632 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>  \u06a9\u062f \u06a9\u0627\u0645\u0644:<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u06a9\u0627\u0645\u0644 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.  \u0645\u0646 \u0627\u0632 Umbraco 13.4.0 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0645. <\/p>\n<p>  \u0646\u062a\u06cc\u062c\u0647<\/p>\n<p>\u0628\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644\u060c \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u06a9 \u0622\u0641\u06cc\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0628\u06a9 \u0622\u0641\u06cc\u0633 Umbraco \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u0634\u0631\u0648\u0637 \u0645\u062d\u062a\u0648\u0627 \u062f\u0631 \u0646\u0645\u0627\u0647\u0627\u06cc \u0634\u0645\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0641\u0642\u0637 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0628\u062e\u0634 \u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0627\u0632 \u0633\u0627\u06cc\u062a \u0634\u0645\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f \u0648 \u0627\u0645\u0646\u06cc\u062a \u0622\u0646 \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<div data-article-id=\"1913483\" id=\"article-body\">\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k\/#%D9%85%D8%B9%D8%B1%D9%81%DB%8C\" >\u0645\u0639\u0631\u0641\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k\/#%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7\" >\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k\/#%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_Umbraco_Backoffice_User_Accessor\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc Umbraco Backoffice User Accessor<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k\/#%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_Backoffice_User_Accessor_%D8%AF%D8%B1_%DB%8C%DA%A9_Controller_and_View\" >\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Backoffice User Accessor \u062f\u0631 \u06cc\u06a9 Controller and View<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k\/#%DA%A9%D8%AF_%DA%A9%D8%A7%D9%85%D9%84\" >\u06a9\u062f \u06a9\u0627\u0645\u0644:<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/creating-an-umbraco-backoffice-accessor-for-conditional-page-rendering-4f1k\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%B9%D8%B1%D9%81%DB%8C\"><\/span>\n<p>  \u0645\u0639\u0631\u0641\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Umbraco \u06cc\u06a9 CMS \u0645\u062d\u0628\u0648\u0628 \u0627\u0633\u062a \u06a9\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0634\u062e\u0635\u06cc \u0633\u0627\u0632\u06cc \u0648 \u0627\u0645\u0646\u06cc\u062a\u06cc \u06af\u0633\u062a\u0631\u062f\u0647 \u0627\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u06cc\u06a9\u06cc \u0627\u0632 \u062c\u0646\u0628\u0647 \u0647\u0627\u06cc \u062d\u06cc\u0627\u062a\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0627\u06cc\u062a Umbraco \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u06a9\u0647 \u0641\u0642\u0637 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0628\u062e\u0634 \u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0627\u0632 \u0633\u0627\u06cc\u062a \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f.  \u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0645\u0627 \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0628\u06a9 \u0622\u0641\u06cc\u0633 Umbraco \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u0634\u0631\u0648\u0637 \u0645\u062d\u062a\u0648\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7\"><\/span>\n<p>  \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\u062f\u0627\u0646\u0634 \u0627\u0648\u0644\u06cc\u0647 ASP.NET Core.<\/li>\n<li>\u0646\u0635\u0628 Umbraco \u0645\u0648\u062c\u0648\u062f.  (\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 \u062c\u062f\u06cc\u062f umbraco 13 \u0627\u06cc\u0646 \u0648\u0628\u0644\u0627\u06af \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f)<\/li>\n<li>\u0648\u06cc\u0698\u0648\u0627\u0644 \u0627\u0633\u062a\u0648\u062f\u06cc\u0648 \u06cc\u0627 \u0647\u0631 C# IDE \u062f\u06cc\u06af\u0631.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_Umbraco_Backoffice_User_Accessor\"><\/span>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc Umbraco Backoffice User Accessor<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 Accessor \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062f\u0631 backoffice \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u062f.<\/p>\n<p><strong>\u0645\u0631\u062d\u0644\u0647 1: \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc IBacofficeUserAccessor \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f<\/strong><br \/>\u0627\u06cc\u0646 \u0631\u0627\u0628\u0637 \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 backoffice \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>using System.Security.Claims;\nnamespace YourNamespace\n{\n\u00a0 \u00a0 public interface IBackofficeUserAccessor\n\u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 ClaimsPrincipal BackofficeUser { get; }\n\u00a0 \u00a0 }\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p><strong>\u062a\u0648\u0636\u06cc\u062d<\/strong>:<br \/>\u0627\u06cc\u0646 \u06a9\u062f \u0631\u0627\u0628\u0637\u06cc \u0628\u0647 \u0646\u0627\u0645 IBackofficeUserAccessor \u0628\u0627 \u0648\u06cc\u0698\u06af\u06cc BackofficeUser \u0627\u0632 \u0646\u0648\u0639 ClaimsPrincipal \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u0631\u0627\u0628\u0637 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<\/blockquote>\n<p><strong>\u0645\u0631\u062d\u0644\u0647 2: \u06a9\u0644\u0627\u0633 BackofficeUserAccessor \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f<\/strong><br \/>\u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0631\u0627\u0628\u0637 IBackofficeUserAccessor \u0631\u0627 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 backoffice \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u0628\u0631\u062e\u06cc \u0627\u0632 \u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc \u0627\u0636\u0627\u0641\u06cc \u0628\u0647 \u062e\u0637\u0627\u0647\u0627\u06cc \u06af\u0632\u0627\u0631\u0634 \u0627\u0636\u0627\u0641\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>using Microsoft.AspNetCore.Authentication.Cookies;\nusing Microsoft.AspNetCore.Authentication;\nusing Microsoft.Extensions.Options;\nusing System.Security.Claims;\nnamespace YourNamespace\n{\n\u00a0 \u00a0 public class BackofficeUserAccessor : IBackofficeUserAccessor\n\u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 private readonly IOptionsSnapshot<cookieauthenticationoptions> _cookieOptionsSnapshot;\n\u00a0 \u00a0 \u00a0 \u00a0 private readonly IHttpContextAccessor _httpContextAccessor;\n\n\u00a0 \u00a0 \u00a0 \u00a0 private readonly ILogger<backofficeuseraccessor> _logger;\n\u00a0 \u00a0 \u00a0 \u00a0 public BackofficeUserAccessor(\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 IOptionsSnapshot<cookieauthenticationoptions> cookieOptionsSnapshot,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 IHttpContextAccessor httpContextAccessor,\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ILogger<backofficeuseraccessor> logger\n\u00a0 \u00a0 \u00a0 \u00a0 )\n\u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _cookieOptionsSnapshot = cookieOptionsSnapshot;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _httpContextAccessor = httpContextAccessor;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger = logger;\u00a0\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 public ClaimsIdentity BackofficeUser\n\u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 get\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 var httpContext = _httpContextAccessor.HttpContext;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (httpContext == null)\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogWarning(\"BackofficeAUserAccessor: HttpContext is null.\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return new ClaimsIdentity();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 CookieAuthenticationOptions cookieOptions = _cookieOptionsSnapshot.Get(Umbraco.Cms.Core.Constants.Security.BackOfficeAuthenticationType);\n\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 string? backOfficeCookie = httpContext.Request.Cookies[cookieOptions.Cookie.Name!];\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (string.IsNullOrEmpty(backOfficeCookie))\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogWarning(\"BackofficeAUserAccessor: BackOffice cookie is null or empty.\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return new ClaimsIdentity();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 AuthenticationTicket? unprotected;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 try\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 unprotected = cookieOptions.TicketDataFormat.Unprotect(backOfficeCookie!);\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 catch (Exception ex)\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogError(ex, \"BackofficeAUserAccessor: Failed to unprotect the BackOffice cookie.\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return new ClaimsIdentity();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (unprotected == null)\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogWarning(\"BackofficeAUserAccessor: Unprotected authentication ticket is null.\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return new ClaimsIdentity();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ClaimsIdentity? backOfficeIdentity = unprotected.Principal.GetUmbracoIdentity();\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (backOfficeIdentity == null)\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogWarning(\"BackofficeAUserAccessor: BackOffice identity is null.\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 else\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _logger.LogInformation(\"BackofficeAUserAccessor: User authenticated.\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return backOfficeIdentity;\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n}\n<\/backofficeuseraccessor><\/cookieauthenticationoptions><\/backofficeuseraccessor><\/cookieauthenticationoptions><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p><strong>\u062a\u0648\u0636\u06cc\u062d<\/strong>:<\/p>\n<ul>\n<li>\n<strong>\u0627\u0639\u0644\u0627\u0645\u06cc\u0647 \u06a9\u0644\u0627\u0633<\/strong>: \u06a9\u0644\u0627\u0633 BackofficeUserAccessor \u0631\u0627\u0628\u0637 IBackofficeUserAccessor \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>\u0633\u0627\u0632\u0646\u062f\u0647<\/strong>: \u0633\u0627\u0632\u0646\u062f\u0647 IOptionsSnapshot \u0648 IHttpContextAccessor \u0631\u0627 \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u06af\u0632\u06cc\u0646\u0647 \u0647\u0627\u06cc \u06a9\u0648\u06a9\u06cc \u0648 \u0632\u0645\u06cc\u0646\u0647 HTTP \u0641\u0639\u0644\u06cc \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f.<\/li>\n<li>\n<strong>\u0648\u06cc\u0698\u06af\u06cc BackofficeUser<\/strong>: \u0627\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u0632\u0645\u06cc\u0646\u0647 HTTP \u0641\u0639\u0644\u06cc \u062a\u0647\u06cc \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.  \u0627\u06af\u0631 \u0646\u0647\u060c \u06a9\u0648\u06a9\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a backoffice \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f \u0648 \u062e\u0627\u0644\u06cc \u0628\u0648\u062f\u0646 \u0622\u0646 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06af\u0631 \u06a9\u0648\u06a9\u06cc \u0645\u0639\u062a\u0628\u0631 \u0628\u0627\u0634\u062f\u060c \u0627\u0632 \u06a9\u0648\u06a9\u06cc \u0645\u062d\u0627\u0641\u0638\u062a \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0627\u0635\u0644 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0627\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u0627\u06af\u0631 \u0646\u0647\u060c \u0627\u0635\u0644 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u062e\u0627\u0644\u06cc \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/li>\n<\/ul>\n<\/blockquote>\n<p><strong>\u0645\u0631\u062d\u0644\u0647 3: Accessor \u0631\u0627 \u062f\u0631 Program.cs \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f<\/strong><br \/>BackofficeUserAccessor \u0631\u0627 \u062f\u0631 \u0638\u0631\u0641 \u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>using InstallingUmbracoDemo;\nusing Umbraco.Cms.Core.Services;\nWebApplicationBuilder builder = WebApplication.CreateBuilder(args);\n\n\/\/ Register IHttpContextAccessor\nbuilder.Services.AddHttpContextAccessor();\n\/\/ Register the BackofficeUserAccessor\nbuilder.Services.AddTransient<ibackofficeuseraccessor backofficeuseraccessor=\"\">();\n\nbuilder.CreateUmbracoBuilder()\n\u00a0 \u00a0 .AddBackOffice()\n\u00a0 \u00a0 .AddWebsite()\n\u00a0 \u00a0 .AddDeliveryApi()\n\u00a0 \u00a0 .AddComposers()\n\u00a0 \u00a0 .Build();\nWebApplication app = builder.Build();\nawait app.BootUmbracoAsync();\napp.UseUmbraco()\n\u00a0 \u00a0 .WithMiddleware(u =&gt;\n\u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseBackOffice();\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseWebsite();\n\u00a0 \u00a0 })\n\u00a0 \u00a0 .WithEndpoints(u =&gt;\n\u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseInstallerEndpoints();\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseBackOfficeEndpoints();\n\u00a0 \u00a0 \u00a0 \u00a0 u.UseWebsiteEndpoints();\n\u00a0 \u00a0 });\nawait app.RunAsync();\n<\/ibackofficeuseraccessor><\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_Backoffice_User_Accessor_%D8%AF%D8%B1_%DB%8C%DA%A9_Controller_and_View\"><\/span>\n<p>  \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Backoffice User Accessor \u062f\u0631 \u06cc\u06a9 Controller and View<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 BackofficeUserAccessor \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0631 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0648 \u0646\u0645\u0627\u0647\u0627\u06cc \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u062d\u062a\u0648\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u0634\u0631\u0648\u0637 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<p><strong>\u0627\u0632 BackofficeUserAccessor \u062f\u0631 \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/strong><br \/>IBackofficeUserAccessor \u0631\u0627 \u0628\u0647 \u06a9\u0646\u062a\u0631\u0644\u0631 \u062e\u0648\u062f \u062a\u0632\u0631\u06cc\u0642 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>YourController.cs:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>using Microsoft.AspNetCore.Mvc;\nnamespace YourNamespace.Controllers\n{\n\u00a0 \u00a0 public class YourController : Controller\n\u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 private readonly IBackofficeUserAccessor _backofficeUserAccessor;\n\u00a0 \u00a0 \u00a0 \u00a0 public YourController(IBackofficeUserAccessor backofficeUserAccessor)\n\u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 _backofficeUserAccessor = backofficeUserAccessor;\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 public IActionResult YourAction()\n\u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 if (!_backofficeUserAccessor.BackofficeUser.IsAuthenticated)\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return Unauthorized(\"You are not authorized to view this page.\");\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 return View();\n\u00a0 \u00a0 \u00a0 \u00a0 }\n\u00a0 \u00a0 }\n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p><strong>\u062a\u0648\u0636\u06cc\u062d:<\/strong><\/p>\n<ul>\n<li>\n<strong>\u062a\u0632\u0631\u06cc\u0642 \u0633\u0627\u0632\u0646\u062f\u0647:<\/strong> \u06a9\u0644\u0627\u0633 YourController \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0627\u0632 IBackofficeUserAccessor \u0631\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0633\u0627\u0632\u0646\u062f\u0647 \u062e\u0648\u062f \u062f\u0631\u06cc\u0627\u0641\u062a \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\n<strong>\u0628\u0631\u0631\u0633\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a:<\/strong> \u062f\u0631 \u0631\u0648\u0634 YourAction\u060c \u0648\u0636\u0639\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 _backofficeUserAccessor \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u0634\u0648\u062f.  BackofficeUser.  \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a.  \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0646\u0634\u062f\u0647 \u0628\u0627\u0634\u062f\u060c \u0646\u062a\u06cc\u062c\u0647 \u063a\u06cc\u0631\u0645\u062c\u0627\u0632 \u0631\u0627 \u0628\u0631\u0645\u06cc\u200c\u06af\u0631\u062f\u0627\u0646\u062f.  \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u060c \u0646\u0645\u0627 \u0631\u0627 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/li>\n<\/ul>\n<\/blockquote>\n<p><strong>\u0627\u0632 BackofficeUserAccessor \u062f\u0631 \u06cc\u06a9 View \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f<\/strong><br \/>\u0627\u0632 IBackofficeUserAccessor \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u062f\u0631 \u0646\u0645\u0627\u06cc Razor \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u0634\u0631\u0648\u0637 \u0645\u062d\u062a\u0648\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>YourView.cshtml:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>@inject YourNamespace.IBackofficeUserAccessor BackofficeUserAccessor\n@if (BackofficeUserAccessor.BackofficeUser.IsAuthenticated)\n{\n\u00a0 \u00a0 \n\u00a0 \u00a0 <!-- Your protected content goes here -->\n}\nelse\n{\n\u00a0 \u00a0 \n}\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<blockquote>\n<p><strong>\u062a\u0648\u0636\u06cc\u062d:<\/strong><br \/><strong>\u062a\u0632\u0631\u06cc\u0642 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u062f\u0631 \u0646\u0645\u0627\u06cc:<\/strong> BackofficeUserAccessor \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062f\u0633\u062a\u0648\u0631 inject@ \u0628\u0647 view \u062a\u0632\u0631\u06cc\u0642 \u0645\u06cc \u0634\u0648\u062f.<br \/><strong>\u0631\u0646\u062f\u0631 \u0634\u0631\u0637\u06cc:<\/strong> \u0646\u0645\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 BackofficeUserAccessor \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.  BackofficeUser.  \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a.  \u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0628\u0627\u0634\u062f\u060c \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0631\u0627 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.  \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u060c \u067e\u06cc\u0627\u0645 \u063a\u06cc\u0631\u0645\u062c\u0627\u0632 \u0631\u0627 \u0646\u0634\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<\/blockquote>\n<h2><span class=\"ez-toc-section\" id=\"%DA%A9%D8%AF_%DA%A9%D8%A7%D9%85%D9%84\"><\/span>\n<p>  \u06a9\u062f \u06a9\u0627\u0645\u0644:<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u06a9\u0627\u0645\u0644 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.  \u0645\u0646 \u0627\u0632 Umbraco 13.4.0 \u062f\u0631 \u067e\u0631\u0648\u0698\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0627\u0645. <\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u0646 \u0627\u06cc\u0646 \u0645\u0631\u0627\u062d\u0644\u060c \u06cc\u06a9 \u0627\u0628\u0632\u0627\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u06a9 \u0622\u0641\u06cc\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0631\u0633\u06cc \u0645\u06cc\u200c\u06a9\u0646\u062f \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0628\u06a9 \u0622\u0641\u06cc\u0633 Umbraco \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u0634\u0631\u0648\u0637 \u0645\u062d\u062a\u0648\u0627 \u062f\u0631 \u0646\u0645\u0627\u0647\u0627\u06cc \u0634\u0645\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0641\u0642\u0637 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062a\u0623\u06cc\u06cc\u062f \u0634\u062f\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0628\u062e\u0634 \u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0627\u0632 \u0633\u0627\u06cc\u062a \u0634\u0645\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f \u0648 \u0627\u0645\u0646\u06cc\u062a \u0622\u0646 \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Summarize this content to 400 words in Persian Lang \u0645\u0639\u0631\u0641\u06cc Umbraco \u06cc\u06a9 CMS \u0645\u062d\u0628\u0648\u0628 \u0627\u0633\u062a \u06a9\u0647 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0634\u062e\u0635\u06cc \u0633\u0627\u0632\u06cc \u0648 \u0627\u0645\u0646\u06cc\u062a\u06cc \u06af\u0633\u062a\u0631\u062f\u0647 \u0627\u06cc \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f. \u06cc\u06a9\u06cc \u0627\u0632 \u062c\u0646\u0628\u0647 \u0647\u0627\u06cc \u062d\u06cc\u0627\u062a\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0633\u0627\u06cc\u062a Umbraco \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u0634\u0648\u062f \u06a9\u0647 \u0641\u0642\u0637 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0628\u0647 \u0628\u062e\u0634 \u0647\u0627\u06cc \u062e\u0627\u0635\u06cc \u0627\u0632 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":68352,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-68351","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/68351","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=68351"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/68351\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/68352"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=68351"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=68351"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=68351"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}