ایجاد یک Umbraco Backoffice Accessor برای رندر صفحه مشروط

Summarize this content to 400 words in Persian Lang
معرفی
Umbraco یک CMS محبوب است که ویژگی های شخصی سازی و امنیتی گسترده ای را ارائه می دهد. یکی از جنبه های حیاتی مدیریت سایت Umbraco این است که اطمینان حاصل شود که فقط کاربران احراز هویت شده می توانند به بخش های خاصی از سایت دسترسی داشته باشند. در این راهنما، ما یک ابزار دسترسی برای بررسی وضعیت احراز هویت کاربر در بک آفیس Umbraco ایجاد می کنیم و از آن برای نمایش مشروط محتوا استفاده می کنیم.
پیش نیازها
دانش اولیه ASP.NET Core.
نصب Umbraco موجود. (برای ایجاد یک پروژه جدید umbraco 13 این وبلاگ را بررسی کنید)
ویژوال استودیو یا هر C# IDE دیگر.
راه اندازی Umbraco Backoffice User Accessor
ابتدا باید یک Accessor ایجاد کنیم که وضعیت احراز هویت کاربر را در backoffice بررسی کند.
مرحله 1: رابط کاربری IBacofficeUserAccessor را تعریف کنیداین رابط وضعیت احراز هویت کاربر backoffice را نشان می دهد
using System.Security.Claims;
namespace YourNamespace
{
public interface IBackofficeUserAccessor
{
ClaimsPrincipal BackofficeUser { get; }
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
توضیح:این کد رابطی به نام IBackofficeUserAccessor با ویژگی BackofficeUser از نوع ClaimsPrincipal تعریف می کند. این رابط برای دسترسی به ادعاهای کاربر پیاده سازی خواهد شد.
مرحله 2: کلاس BackofficeUserAccessor را پیاده سازی کنیداین کلاس رابط IBackofficeUserAccessor را برای بازیابی وضعیت احراز هویت کاربر backoffice پیاده سازی می کند. برخی از گزارش های اضافی به خطاهای گزارش اضافه شده است.
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication;
using Microsoft.Extensions.Options;
using System.Security.Claims;
namespace YourNamespace
{
public class BackofficeUserAccessor : IBackofficeUserAccessor
{
private readonly IOptionsSnapshot _cookieOptionsSnapshot;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ILogger _logger;
public BackofficeUserAccessor(
IOptionsSnapshot cookieOptionsSnapshot,
IHttpContextAccessor httpContextAccessor,
ILogger logger
)
{
_cookieOptionsSnapshot = cookieOptionsSnapshot;
_httpContextAccessor = httpContextAccessor;
_logger = logger;
}
public ClaimsIdentity BackofficeUser
{
get
{
var httpContext = _httpContextAccessor.HttpContext;
if (httpContext == null)
{
_logger.LogWarning(“BackofficeAUserAccessor: HttpContext is null.”);
return new ClaimsIdentity();
}
CookieAuthenticationOptions cookieOptions = _cookieOptionsSnapshot.Get(Umbraco.Cms.Core.Constants.Security.BackOfficeAuthenticationType);
string? backOfficeCookie = httpContext.Request.Cookies[cookieOptions.Cookie.Name!];
if (string.IsNullOrEmpty(backOfficeCookie))
{
_logger.LogWarning(“BackofficeAUserAccessor: BackOffice cookie is null or empty.”);
return new ClaimsIdentity();
}
AuthenticationTicket? unprotected;
try
{
unprotected = cookieOptions.TicketDataFormat.Unprotect(backOfficeCookie!);
}
catch (Exception ex)
{
_logger.LogError(ex, “BackofficeAUserAccessor: Failed to unprotect the BackOffice cookie.”);
return new ClaimsIdentity();
}
if (unprotected == null)
{
_logger.LogWarning(“BackofficeAUserAccessor: Unprotected authentication ticket is null.”);
return new ClaimsIdentity();
}
ClaimsIdentity? backOfficeIdentity = unprotected.Principal.GetUmbracoIdentity();
if (backOfficeIdentity == null)
{
_logger.LogWarning(“BackofficeAUserAccessor: BackOffice identity is null.”);
}
else
{
_logger.LogInformation(“BackofficeAUserAccessor: User authenticated.”);
}
return backOfficeIdentity;
}
}
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
توضیح:
اعلامیه کلاس: کلاس BackofficeUserAccessor رابط IBackofficeUserAccessor را پیاده سازی می کند.
سازنده: سازنده IOptionsSnapshot و IHttpContextAccessor را برای دسترسی به گزینه های کوکی و زمینه HTTP فعلی می پذیرد.
ویژگی BackofficeUser: این ویژگی بررسی می کند که آیا زمینه HTTP فعلی تهی است یا خیر. اگر نه، کوکی احراز هویت backoffice را بازیابی می کند و خالی بودن آن را بررسی می کند. اگر کوکی معتبر باشد، از کوکی محافظت می کند و اصل ادعاهای کاربر را بازیابی می کند. اگر نه، اصل ادعاهای خالی را برمی گرداند.
مرحله 3: Accessor را در Program.cs ثبت کنیدBackofficeUserAccessor را در ظرف تزریق وابستگی ثبت کنید.
using InstallingUmbracoDemo;
using Umbraco.Cms.Core.Services;
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
// Register IHttpContextAccessor
builder.Services.AddHttpContextAccessor();
// Register the BackofficeUserAccessor
builder.Services.AddTransient();
builder.CreateUmbracoBuilder()
.AddBackOffice()
.AddWebsite()
.AddDeliveryApi()
.AddComposers()
.Build();
WebApplication app = builder.Build();
await app.BootUmbracoAsync();
app.UseUmbraco()
.WithMiddleware(u =>
{
u.UseBackOffice();
u.UseWebsite();
})
.WithEndpoints(u =>
{
u.UseInstallerEndpoints();
u.UseBackOfficeEndpoints();
u.UseWebsiteEndpoints();
});
await app.RunAsync();
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
استفاده از Backoffice User Accessor در یک Controller and View
اکنون میتوانیم از BackofficeUserAccessor مستقیماً در کنترلر و نماهای خود برای ارائه محتوا به صورت مشروط استفاده کنیم.
از BackofficeUserAccessor در یک کنترلر استفاده کنیدIBackofficeUserAccessor را به کنترلر خود تزریق کنید تا وضعیت احراز هویت کاربر را بررسی کنید.
YourController.cs:
using Microsoft.AspNetCore.Mvc;
namespace YourNamespace.Controllers
{
public class YourController : Controller
{
private readonly IBackofficeUserAccessor _backofficeUserAccessor;
public YourController(IBackofficeUserAccessor backofficeUserAccessor)
{
_backofficeUserAccessor = backofficeUserAccessor;
}
public IActionResult YourAction()
{
if (!_backofficeUserAccessor.BackofficeUser.IsAuthenticated)
{
return Unauthorized(“You are not authorized to view this page.”);
}
return View();
}
}
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
توضیح:
تزریق سازنده: کلاس YourController یک نمونه از IBackofficeUserAccessor را از طریق سازنده خود دریافت می کند.
بررسی احراز هویت: در روش YourAction، وضعیت احراز هویت کاربر با استفاده از _backofficeUserAccessor بررسی می شود. BackofficeUser. احراز هویت شده است. اگر کاربر احراز هویت نشده باشد، نتیجه غیرمجاز را برمیگرداند. در غیر این صورت، نما را نمایش می دهد.
از BackofficeUserAccessor در یک View استفاده کنیداز IBackofficeUserAccessor مستقیماً در نمای Razor خود برای ارائه مشروط محتوا استفاده کنید.
YourView.cshtml:
@inject YourNamespace.IBackofficeUserAccessor BackofficeUserAccessor
@if (BackofficeUserAccessor.BackofficeUser.IsAuthenticated)
{
}
else
{
}
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
توضیح:تزریق وابستگی در نمای: BackofficeUserAccessor با استفاده از دستور inject@ به view تزریق می شود.رندر شرطی: نمای بررسی می کند که آیا کاربر با استفاده از BackofficeUserAccessor احراز هویت شده است یا خیر. BackofficeUser. احراز هویت شده است. اگر کاربر احراز هویت شده باشد، محتوای محافظت شده را نمایش می دهد. در غیر این صورت، پیام غیرمجاز را نشان می دهد.
کد کامل:
در اینجا می توانید کد کامل را بررسی کنید. من از Umbraco 13.4.0 در پروژه استفاده کرده ام.
نتیجه
با دنبال کردن این مراحل، یک ابزار دسترسی کاربر بک آفیس ایجاد کردهاید که بررسی میکند آیا کاربر به بک آفیس Umbraco وارد شده است و از آن برای نمایش مشروط محتوا در نماهای شما استفاده میکند. این تضمین می کند که فقط کاربران تأیید شده می توانند به بخش های خاصی از سایت شما دسترسی داشته باشند و امنیت آن را افزایش می دهد.
معرفی
Umbraco یک CMS محبوب است که ویژگی های شخصی سازی و امنیتی گسترده ای را ارائه می دهد. یکی از جنبه های حیاتی مدیریت سایت Umbraco این است که اطمینان حاصل شود که فقط کاربران احراز هویت شده می توانند به بخش های خاصی از سایت دسترسی داشته باشند. در این راهنما، ما یک ابزار دسترسی برای بررسی وضعیت احراز هویت کاربر در بک آفیس Umbraco ایجاد می کنیم و از آن برای نمایش مشروط محتوا استفاده می کنیم.
پیش نیازها
- دانش اولیه ASP.NET Core.
- نصب Umbraco موجود. (برای ایجاد یک پروژه جدید umbraco 13 این وبلاگ را بررسی کنید)
- ویژوال استودیو یا هر C# IDE دیگر.
راه اندازی Umbraco Backoffice User Accessor
ابتدا باید یک Accessor ایجاد کنیم که وضعیت احراز هویت کاربر را در backoffice بررسی کند.
مرحله 1: رابط کاربری IBacofficeUserAccessor را تعریف کنید
این رابط وضعیت احراز هویت کاربر backoffice را نشان می دهد
using System.Security.Claims;
namespace YourNamespace
{
public interface IBackofficeUserAccessor
{
ClaimsPrincipal BackofficeUser { get; }
}
}
توضیح:
این کد رابطی به نام IBackofficeUserAccessor با ویژگی BackofficeUser از نوع ClaimsPrincipal تعریف می کند. این رابط برای دسترسی به ادعاهای کاربر پیاده سازی خواهد شد.
مرحله 2: کلاس BackofficeUserAccessor را پیاده سازی کنید
این کلاس رابط IBackofficeUserAccessor را برای بازیابی وضعیت احراز هویت کاربر backoffice پیاده سازی می کند. برخی از گزارش های اضافی به خطاهای گزارش اضافه شده است.
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication;
using Microsoft.Extensions.Options;
using System.Security.Claims;
namespace YourNamespace
{
public class BackofficeUserAccessor : IBackofficeUserAccessor
{
private readonly IOptionsSnapshot _cookieOptionsSnapshot;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ILogger _logger;
public BackofficeUserAccessor(
IOptionsSnapshot cookieOptionsSnapshot,
IHttpContextAccessor httpContextAccessor,
ILogger logger
)
{
_cookieOptionsSnapshot = cookieOptionsSnapshot;
_httpContextAccessor = httpContextAccessor;
_logger = logger;
}
public ClaimsIdentity BackofficeUser
{
get
{
var httpContext = _httpContextAccessor.HttpContext;
if (httpContext == null)
{
_logger.LogWarning("BackofficeAUserAccessor: HttpContext is null.");
return new ClaimsIdentity();
}
CookieAuthenticationOptions cookieOptions = _cookieOptionsSnapshot.Get(Umbraco.Cms.Core.Constants.Security.BackOfficeAuthenticationType);
string? backOfficeCookie = httpContext.Request.Cookies[cookieOptions.Cookie.Name!];
if (string.IsNullOrEmpty(backOfficeCookie))
{
_logger.LogWarning("BackofficeAUserAccessor: BackOffice cookie is null or empty.");
return new ClaimsIdentity();
}
AuthenticationTicket? unprotected;
try
{
unprotected = cookieOptions.TicketDataFormat.Unprotect(backOfficeCookie!);
}
catch (Exception ex)
{
_logger.LogError(ex, "BackofficeAUserAccessor: Failed to unprotect the BackOffice cookie.");
return new ClaimsIdentity();
}
if (unprotected == null)
{
_logger.LogWarning("BackofficeAUserAccessor: Unprotected authentication ticket is null.");
return new ClaimsIdentity();
}
ClaimsIdentity? backOfficeIdentity = unprotected.Principal.GetUmbracoIdentity();
if (backOfficeIdentity == null)
{
_logger.LogWarning("BackofficeAUserAccessor: BackOffice identity is null.");
}
else
{
_logger.LogInformation("BackofficeAUserAccessor: User authenticated.");
}
return backOfficeIdentity;
}
}
}
}
توضیح:
- اعلامیه کلاس: کلاس BackofficeUserAccessor رابط IBackofficeUserAccessor را پیاده سازی می کند.
- سازنده: سازنده IOptionsSnapshot و IHttpContextAccessor را برای دسترسی به گزینه های کوکی و زمینه HTTP فعلی می پذیرد.
- ویژگی BackofficeUser: این ویژگی بررسی می کند که آیا زمینه HTTP فعلی تهی است یا خیر. اگر نه، کوکی احراز هویت backoffice را بازیابی می کند و خالی بودن آن را بررسی می کند. اگر کوکی معتبر باشد، از کوکی محافظت می کند و اصل ادعاهای کاربر را بازیابی می کند. اگر نه، اصل ادعاهای خالی را برمی گرداند.
مرحله 3: Accessor را در Program.cs ثبت کنید
BackofficeUserAccessor را در ظرف تزریق وابستگی ثبت کنید.
using InstallingUmbracoDemo;
using Umbraco.Cms.Core.Services;
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
// Register IHttpContextAccessor
builder.Services.AddHttpContextAccessor();
// Register the BackofficeUserAccessor
builder.Services.AddTransient();
builder.CreateUmbracoBuilder()
.AddBackOffice()
.AddWebsite()
.AddDeliveryApi()
.AddComposers()
.Build();
WebApplication app = builder.Build();
await app.BootUmbracoAsync();
app.UseUmbraco()
.WithMiddleware(u =>
{
u.UseBackOffice();
u.UseWebsite();
})
.WithEndpoints(u =>
{
u.UseInstallerEndpoints();
u.UseBackOfficeEndpoints();
u.UseWebsiteEndpoints();
});
await app.RunAsync();
استفاده از Backoffice User Accessor در یک Controller and View
اکنون میتوانیم از BackofficeUserAccessor مستقیماً در کنترلر و نماهای خود برای ارائه محتوا به صورت مشروط استفاده کنیم.
از BackofficeUserAccessor در یک کنترلر استفاده کنید
IBackofficeUserAccessor را به کنترلر خود تزریق کنید تا وضعیت احراز هویت کاربر را بررسی کنید.
YourController.cs:
using Microsoft.AspNetCore.Mvc;
namespace YourNamespace.Controllers
{
public class YourController : Controller
{
private readonly IBackofficeUserAccessor _backofficeUserAccessor;
public YourController(IBackofficeUserAccessor backofficeUserAccessor)
{
_backofficeUserAccessor = backofficeUserAccessor;
}
public IActionResult YourAction()
{
if (!_backofficeUserAccessor.BackofficeUser.IsAuthenticated)
{
return Unauthorized("You are not authorized to view this page.");
}
return View();
}
}
}
توضیح:
- تزریق سازنده: کلاس YourController یک نمونه از IBackofficeUserAccessor را از طریق سازنده خود دریافت می کند.
- بررسی احراز هویت: در روش YourAction، وضعیت احراز هویت کاربر با استفاده از _backofficeUserAccessor بررسی می شود. BackofficeUser. احراز هویت شده است. اگر کاربر احراز هویت نشده باشد، نتیجه غیرمجاز را برمیگرداند. در غیر این صورت، نما را نمایش می دهد.
از BackofficeUserAccessor در یک View استفاده کنید
از IBackofficeUserAccessor مستقیماً در نمای Razor خود برای ارائه مشروط محتوا استفاده کنید.
YourView.cshtml:
@inject YourNamespace.IBackofficeUserAccessor BackofficeUserAccessor
@if (BackofficeUserAccessor.BackofficeUser.IsAuthenticated)
{
}
else
{
}
توضیح:
تزریق وابستگی در نمای: BackofficeUserAccessor با استفاده از دستور inject@ به view تزریق می شود.
رندر شرطی: نمای بررسی می کند که آیا کاربر با استفاده از BackofficeUserAccessor احراز هویت شده است یا خیر. BackofficeUser. احراز هویت شده است. اگر کاربر احراز هویت شده باشد، محتوای محافظت شده را نمایش می دهد. در غیر این صورت، پیام غیرمجاز را نشان می دهد.
کد کامل:
در اینجا می توانید کد کامل را بررسی کنید. من از Umbraco 13.4.0 در پروژه استفاده کرده ام.
نتیجه
با دنبال کردن این مراحل، یک ابزار دسترسی کاربر بک آفیس ایجاد کردهاید که بررسی میکند آیا کاربر به بک آفیس Umbraco وارد شده است و از آن برای نمایش مشروط محتوا در نماهای شما استفاده میکند. این تضمین می کند که فقط کاربران تأیید شده می توانند به بخش های خاصی از سایت شما دسترسی داشته باشند و امنیت آن را افزایش می دهد.