food-market/src/food-market.api/Infrastructure/Authorization/PermissionRequirement.cs
nns 24646e0649 fix(auth): кассир без модуля «Деньги», кладовщик со складскими правами, ИЛИ-семантика прав
Роль «Кассир» больше не имеет 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>
2026-10-08 02:10:11 +05:00

20 lines
1.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}