82 lines
3.1 KiB
Plaintext
82 lines
3.1 KiB
Plaintext
@page "/settings/{id:guid}"
|
||
@attribute [Authorize]
|
||
@using System.Security.Claims
|
||
@using Microsoft.AspNetCore.Components.Authorization
|
||
@using Microsoft.EntityFrameworkCore
|
||
@using PlaylistShared.Data.Entities
|
||
@inject AuthenticationStateProvider AuthenticationStateProvider
|
||
@inject AppDbContext Db
|
||
@inject NavigationManager Navigation
|
||
|
||
<h3>Настройки плейлиста</h3>
|
||
|
||
@if (playlist == null)
|
||
{
|
||
<p>Загрузка...</p>
|
||
}
|
||
else if (!isOwner)
|
||
{
|
||
<p>Только владелец может изменять настройки.</p>
|
||
}
|
||
else
|
||
{
|
||
<EditForm Model="@playlist.Permissions" OnValidSubmit="@SaveSettings">
|
||
<div class="mb-3">
|
||
<label>Кто может просматривать</label>
|
||
<InputSelect @bind-Value="playlist.Permissions.View" class="form-control">
|
||
<option value="@AccessLevel.All">Все</option>
|
||
<option value="@AccessLevel.Authorized">Авторизованные</option>
|
||
<option value="@AccessLevel.None">Никто</option>
|
||
</InputSelect>
|
||
</div>
|
||
<div class="mb-3">
|
||
<label>Кто может добавлять треки</label>
|
||
<InputSelect @bind-Value="playlist.Permissions.Add" class="form-control">
|
||
<option value="@AccessLevel.All">Все</option>
|
||
<option value="@AccessLevel.Authorized">Авторизованные</option>
|
||
<option value="@AccessLevel.None">Никто</option>
|
||
</InputSelect>
|
||
</div>
|
||
<div class="mb-3">
|
||
<label>Кто может удалять треки</label>
|
||
<InputSelect @bind-Value="playlist.Permissions.Delete" class="form-control">
|
||
<option value="@DeleteAccessLevel.All">Все</option>
|
||
<option value="@DeleteAccessLevel.Authorized">Авторизованные</option>
|
||
<option value="@DeleteAccessLevel.AdderOnly">Тот, кто добавил</option>
|
||
<option value="@DeleteAccessLevel.OwnerOnly">Только владелец</option>
|
||
</InputSelect>
|
||
</div>
|
||
<button type="submit" class="btn btn-primary">Сохранить</button>
|
||
</EditForm>
|
||
}
|
||
|
||
@code {
|
||
[Parameter] public Guid id { get; set; }
|
||
private SharedPlaylist? playlist;
|
||
private bool isOwner;
|
||
private string? currentUserId;
|
||
|
||
protected override async Task OnInitializedAsync()
|
||
{
|
||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||
currentUserId = authState.User.FindFirst(ClaimTypes.NameIdentifier)?.Value;
|
||
|
||
playlist = await Db.SharedPlaylists
|
||
.Include(p => p.Owner)
|
||
.FirstOrDefaultAsync(p => p.Id == id);
|
||
if (playlist != null)
|
||
{
|
||
isOwner = currentUserId == playlist.OwnerUserId;
|
||
}
|
||
}
|
||
|
||
private async Task SaveSettings()
|
||
{
|
||
if (playlist != null)
|
||
{
|
||
Db.SharedPlaylists.Update(playlist);
|
||
await Db.SaveChangesAsync();
|
||
Navigation.NavigateTo("/myplaylists");
|
||
}
|
||
}
|
||
} |