Роль «Кассир» больше не имеет MoneyView (видит только свою смену/Z через CashShiftOperate); роль «Кладовщик» получает InventoryEdit/EnterEdit/LossEdit (веб уже показывал эти пункты — API теперь совпадает). PermissionRequirement поддерживает список прав через запятую (ИЛИ); CashShifts List/Get/Report → MoneyView,CashShiftOperate. DevDataSeeder: дефолты + backfill существующих орг. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
20 lines
1.1 KiB
C#
20 lines
1.1 KiB
C#
using Microsoft.AspNetCore.Authorization;
|
||
|
||
namespace foodmarket.Api.Infrastructure.Authorization;
|
||
|
||
/// <summary>Требование «у текущего пользователя включён ХОТЯ БЫ ОДИН из флагов
|
||
/// прав <see cref="Permissions"/> в его роли (RolePermissions)». Имя права = имя
|
||
/// boolean-свойства <c>RolePermissions</c> (например, "ProductsEdit"). Несколько
|
||
/// прав через запятую = ИЛИ-семантика (например "MoneyView,CashShiftOperate" —
|
||
/// эндпоинт доступен и финансисту, и кассиру для своей смены).</summary>
|
||
public sealed class PermissionRequirement : IAuthorizationRequirement
|
||
{
|
||
public IReadOnlyList<string> Permissions { get; }
|
||
|
||
/// <summary>Первое право — для обратной совместимости/логов.</summary>
|
||
public string Permission => Permissions[0];
|
||
|
||
public PermissionRequirement(string permission)
|
||
=> Permissions = permission.Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
||
}
|