mirror of
https://github.com/gwdevhub/Daybreak.git
synced 2026-09-14 04:19:24 +00:00
58 lines
2.5 KiB
C#
58 lines
2.5 KiB
C#
using Daybreak.Services.Privilege;
|
|
using Daybreak.Shared.Services.Privilege;
|
|
using Daybreak.Views;
|
|
using Microsoft.AspNetCore.Components;
|
|
using Microsoft.Extensions.Logging;
|
|
using System.Core.Extensions;
|
|
using System.Extensions;
|
|
using System.Security.Principal;
|
|
using TrailBlazr.Services;
|
|
|
|
namespace Daybreak.Windows.Services.Privilege;
|
|
|
|
internal sealed class PrivilegeManager(
|
|
PrivilegeContext privilegeContext,
|
|
IViewManager viewManager,
|
|
ILogger<PrivilegeManager> logger) : IPrivilegeManager
|
|
{
|
|
public bool AdminPrivileges => new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator);
|
|
|
|
private readonly PrivilegeContext privilegeContext = privilegeContext.ThrowIfNull();
|
|
private readonly IViewManager viewManager = viewManager.ThrowIfNull();
|
|
private readonly ILogger<PrivilegeManager> logger = logger.ThrowIfNull();
|
|
|
|
public Task<bool> RequestAdminPrivileges<TCancelView>(string messageToUser, (string, object)[]? cancelViewParams, CancellationToken cancellationToken)
|
|
where TCancelView : ComponentBase
|
|
{
|
|
var taskCompletionSource = new TaskCompletionSource<bool>();
|
|
cancellationToken.Register(() =>
|
|
{
|
|
taskCompletionSource.TrySetCanceled();
|
|
this.viewManager.ShowView<TCancelView>(cancelViewParams ?? []);
|
|
});
|
|
this.privilegeContext.PrivilegeRequestOperation = taskCompletionSource;
|
|
this.privilegeContext.UserMessage = messageToUser;
|
|
this.privilegeContext.CancelViewType = typeof(TCancelView);
|
|
this.privilegeContext.CancelViewParams = cancelViewParams;
|
|
this.viewManager.ShowView<RequestElevationView>();
|
|
return taskCompletionSource.Task;
|
|
}
|
|
|
|
public Task<bool> RequestNormalPrivileges<TCancelView>(string messageToUser, (string, object)[]? cancelViewParams, CancellationToken cancellationToken)
|
|
where TCancelView : ComponentBase
|
|
{
|
|
var taskCompletionSource = new TaskCompletionSource<bool>();
|
|
cancellationToken.Register(() =>
|
|
{
|
|
taskCompletionSource.TrySetCanceled();
|
|
this.viewManager.ShowView<TCancelView>(cancelViewParams ?? []);
|
|
});
|
|
this.privilegeContext.PrivilegeRequestOperation = taskCompletionSource;
|
|
this.privilegeContext.UserMessage = messageToUser;
|
|
this.privilegeContext.CancelViewType = typeof(TCancelView);
|
|
this.privilegeContext.CancelViewParams = cancelViewParams;
|
|
this.viewManager.ShowView<RequestDelevationView>();
|
|
return taskCompletionSource.Task;
|
|
}
|
|
}
|