Настройка доступов вынесена в диалог
This commit is contained in:
113
PlaylistShared.Pwa/Components/PermissionsDialog.razor
Normal file
113
PlaylistShared.Pwa/Components/PermissionsDialog.razor
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
@using PlaylistShared.Shared.Enums
|
||||||
|
@using PlaylistShared.Shared.Shared
|
||||||
|
@inject HttpClient Http
|
||||||
|
@inject ISnackbar Snackbar
|
||||||
|
|
||||||
|
<MudDialog>
|
||||||
|
<TitleContent>
|
||||||
|
<MudText Typo="Typo.h6">Настройки доступа</MudText>
|
||||||
|
</TitleContent>
|
||||||
|
<DialogContent>
|
||||||
|
<MudGrid>
|
||||||
|
<MudItem xs="12" sm="6">
|
||||||
|
<MudSelect T="ViewPermission" Label="Просмотр" @bind-Value="_permissions.ViewPermission" Variant="Variant.Outlined" FullWidth="true">
|
||||||
|
<MudSelectItem Value="ViewPermission.Everyone">Все</MudSelectItem>
|
||||||
|
<MudSelectItem Value="ViewPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
|
||||||
|
</MudSelect>
|
||||||
|
</MudItem>
|
||||||
|
<MudItem xs="12" sm="6">
|
||||||
|
<MudSelect T="ViewPermission" Label="Воспроизведение" @bind-Value="_permissions.PlayPermission" Variant="Variant.Outlined" FullWidth="true">
|
||||||
|
<MudSelectItem Value="ViewPermission.Everyone">Все</MudSelectItem>
|
||||||
|
<MudSelectItem Value="ViewPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
|
||||||
|
</MudSelect>
|
||||||
|
</MudItem>
|
||||||
|
<MudItem xs="12" sm="6">
|
||||||
|
<MudSelect T="EditPermission" Label="Добавление треков" @bind-Value="_permissions.AddPermission" Variant="Variant.Outlined" FullWidth="true">
|
||||||
|
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
|
||||||
|
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
|
||||||
|
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
|
||||||
|
</MudSelect>
|
||||||
|
</MudItem>
|
||||||
|
<MudItem xs="12" sm="6">
|
||||||
|
<MudSelect T="EditPermission" Label="Удаление треков" @bind-Value="_permissions.RemovePermission" Variant="Variant.Outlined" FullWidth="true">
|
||||||
|
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
|
||||||
|
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
|
||||||
|
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
|
||||||
|
</MudSelect>
|
||||||
|
</MudItem>
|
||||||
|
</MudGrid>
|
||||||
|
</DialogContent>
|
||||||
|
<DialogActions>
|
||||||
|
<MudButton Variant="Variant.Text" Color="Color.Default" OnClick="Cancel">Отмена</MudButton>
|
||||||
|
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="Save" Disabled="_saving">
|
||||||
|
@if (_saving)
|
||||||
|
{
|
||||||
|
<MudProgressCircular Size="Size.Small" Indeterminate />
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
<span>Сохранить</span>
|
||||||
|
}
|
||||||
|
</MudButton>
|
||||||
|
</DialogActions>
|
||||||
|
</MudDialog>
|
||||||
|
|
||||||
|
@code {
|
||||||
|
[CascadingParameter] private IMudDialogInstance? MudDialog { get; set; }
|
||||||
|
|
||||||
|
[Parameter] public string ShareToken { get; set; } = string.Empty;
|
||||||
|
[Parameter] public UpdatePermissionsDto InitialPermissions { get; set; } = new();
|
||||||
|
|
||||||
|
[Parameter] public EventCallback<UpdatePermissionsDto> OnPermissionsUpdated { get; set; }
|
||||||
|
|
||||||
|
private UpdatePermissionsDto _permissions = new();
|
||||||
|
private bool _saving;
|
||||||
|
|
||||||
|
protected override void OnInitialized()
|
||||||
|
{
|
||||||
|
_permissions = new UpdatePermissionsDto
|
||||||
|
{
|
||||||
|
ViewPermission = InitialPermissions.ViewPermission,
|
||||||
|
PlayPermission = InitialPermissions.PlayPermission,
|
||||||
|
AddPermission = InitialPermissions.AddPermission,
|
||||||
|
RemovePermission = InitialPermissions.RemovePermission
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task Save()
|
||||||
|
{
|
||||||
|
_saving = true;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var response = await Http.PutAsJsonAsync($"/api/sharedplaylist/{ShareToken}/permissions", _permissions);
|
||||||
|
if (response.IsSuccessStatusCode)
|
||||||
|
{
|
||||||
|
var result = await response.Content.ReadFromJsonAsync<ApiResponse<SharedPlaylistDto>>();
|
||||||
|
if (result?.Success == true)
|
||||||
|
{
|
||||||
|
Snackbar.Add("Настройки доступа сохранены", Severity.Success);
|
||||||
|
await OnPermissionsUpdated.InvokeAsync(_permissions);
|
||||||
|
MudDialog?.Close(DialogResult.Ok(_permissions));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Snackbar.Add(result?.Error?.Message ?? "Ошибка сохранения", Severity.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Snackbar.Add("Ошибка сохранения прав", Severity.Error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
_saving = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Cancel() => MudDialog?.Cancel();
|
||||||
|
}
|
||||||
@@ -40,7 +40,16 @@
|
|||||||
Color="Color.Warning"
|
Color="Color.Warning"
|
||||||
OnClick="ToggleFavorite"
|
OnClick="ToggleFavorite"
|
||||||
Disabled="_favoriteLoading"
|
Disabled="_favoriteLoading"
|
||||||
Size="Size.Medium" />
|
Size="Size.Medium" />
|
||||||
|
|
||||||
|
@if (_isCreator && _isAuthenticated)
|
||||||
|
{
|
||||||
|
<MudIconButton Icon="@Icons.Material.Filled.Settings"
|
||||||
|
Color="Color.Default"
|
||||||
|
OnClick="OpenPermissionsDialog"
|
||||||
|
Title="Настройки доступа"
|
||||||
|
Size="Size.Medium" />
|
||||||
|
}
|
||||||
</div>
|
</div>
|
||||||
<MudText Typo="Typo.body2" Color="Color.Secondary">Владелец: @_playlist.Creator?.UserName</MudText>
|
<MudText Typo="Typo.body2" Color="Color.Secondary">Владелец: @_playlist.Creator?.UserName</MudText>
|
||||||
</div>
|
</div>
|
||||||
@@ -49,53 +58,6 @@
|
|||||||
</MudCardHeader>
|
</MudCardHeader>
|
||||||
|
|
||||||
<MudCardContent>
|
<MudCardContent>
|
||||||
<!-- Настройки доступа (только для создателя, который авторизован) -->
|
|
||||||
@if (_isCreator && _isAuthenticated)
|
|
||||||
{
|
|
||||||
<MudPaper Class="pa-4 mb-4" Elevation="0" Style="background-color: rgba(0,0,0,0.05); border-radius: 8px;">
|
|
||||||
<MudText Typo="Typo.h6" GutterBottom>Настройки доступа</MudText>
|
|
||||||
<MudGrid>
|
|
||||||
<MudItem xs="12" sm="4">
|
|
||||||
<MudSelect T="ViewPermission" Label="Просмотр" @bind-Value="_editPermissions.ViewPermission" Variant="Variant.Outlined" FullWidth="true">
|
|
||||||
<MudSelectItem Value="ViewPermission.Everyone">Все</MudSelectItem>
|
|
||||||
<MudSelectItem Value="ViewPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
|
|
||||||
</MudSelect>
|
|
||||||
</MudItem>
|
|
||||||
<MudItem xs="12" sm="4">
|
|
||||||
<MudSelect T="ViewPermission" Label="Воспроизведение" @bind-Value="_editPermissions.PlayPermission" Variant="Variant.Outlined" FullWidth="true">
|
|
||||||
<MudSelectItem Value="ViewPermission.Everyone">Все</MudSelectItem>
|
|
||||||
<MudSelectItem Value="ViewPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
|
|
||||||
</MudSelect>
|
|
||||||
</MudItem>
|
|
||||||
<MudItem xs="12" sm="4">
|
|
||||||
<MudSelect T="EditPermission" Label="Добавление треков" @bind-Value="_editPermissions.AddPermission" Variant="Variant.Outlined" FullWidth="true">
|
|
||||||
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
|
|
||||||
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
|
|
||||||
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
|
|
||||||
</MudSelect>
|
|
||||||
</MudItem>
|
|
||||||
<MudItem xs="12" sm="4">
|
|
||||||
<MudSelect T="EditPermission" Label="Удаление треков" @bind-Value="_editPermissions.RemovePermission" Variant="Variant.Outlined" FullWidth="true">
|
|
||||||
<MudSelectItem Value="EditPermission.Everyone">Все</MudSelectItem>
|
|
||||||
<MudSelectItem Value="EditPermission.AuthorizedOnly">Только авторизованные</MudSelectItem>
|
|
||||||
<MudSelectItem Value="EditPermission.AddedByUserOnly">Только добавивший</MudSelectItem>
|
|
||||||
</MudSelect>
|
|
||||||
</MudItem>
|
|
||||||
</MudGrid>
|
|
||||||
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="SavePermissions" Disabled="_savingPermissions">
|
|
||||||
@if (_savingPermissions)
|
|
||||||
{
|
|
||||||
<MudProgressCircular Size="Size.Small" Indeterminate />
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
<span>Сохранить</span>
|
|
||||||
}
|
|
||||||
</MudButton>
|
|
||||||
</MudPaper>
|
|
||||||
}
|
|
||||||
|
|
||||||
<!-- Блок добавления трека (только для авторизованных с правом добавления) -->
|
<!-- Блок добавления трека (только для авторизованных с правом добавления) -->
|
||||||
@if (_canAdd)
|
@if (_canAdd)
|
||||||
{
|
{
|
||||||
@@ -470,39 +432,22 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task SavePermissions()
|
private async Task OpenPermissionsDialog()
|
||||||
{
|
{
|
||||||
if (!_isAuthenticated) return;
|
var parameters = new DialogParameters
|
||||||
_savingPermissions = true;
|
{
|
||||||
try
|
{ nameof(PermissionsDialog.ShareToken), Token },
|
||||||
|
{ nameof(PermissionsDialog.InitialPermissions), _editPermissions }
|
||||||
|
};
|
||||||
|
var dialog = await DialogService.ShowAsync<PermissionsDialog>("Настройки доступа", parameters);
|
||||||
|
var result = await dialog.Result;
|
||||||
|
if (!result.Canceled && result.Data is UpdatePermissionsDto updatedPermissions)
|
||||||
{
|
{
|
||||||
var response = await Http.PutAsJsonAsync($"/api/sharedplaylist/{Token}/permissions", _editPermissions);
|
// Обновляем локальные права и перезагружаем плейлист
|
||||||
if (response.IsSuccessStatusCode)
|
_editPermissions = updatedPermissions;
|
||||||
{
|
await LoadPlaylist(); // перезагружаем, чтобы обновить _playlist и права доступа
|
||||||
var result = await response.Content.ReadFromJsonAsync<ApiResponse<SharedPlaylistDto>>();
|
await LoadTracks(); // возможно, треки тоже нужно перезагрузить
|
||||||
if (result?.Success == true)
|
StateHasChanged();
|
||||||
{
|
|
||||||
_playlist = result.Data;
|
|
||||||
|
|
||||||
await ConfigurePermissions();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Snackbar.Add(result?.Error?.Message ?? "Ошибка обновления", Severity.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Snackbar.Add("Ошибка сохранения прав", Severity.Error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Snackbar.Add($"Ошибка: {ex.Message}", Severity.Error);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
_savingPermissions = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -558,4 +503,6 @@
|
|||||||
_isPlaying = false;
|
_isPlaying = false;
|
||||||
StateHasChanged();
|
StateHasChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user