У меня есть фрагмент кода ниже. Мне нужен метод GetPermissions таким образом, чтобы я получал только те перечисления, в которых есть item.Actions.XXXX.value = true

Раньше я использовал словарь, поэтому код, который я прокомментировал, работал

public class ResourcePermissionModel
    {
        public ResourcePermissionModel();
        public int ResourceId { get; set; }
        public IEnumerable<Permission> Permissions { get; set; }
    }

 public enum Permission
    {
        View = 0,
        Modify = 1,
        Delete = 2,
        Assign = 3
    }

var resourcePerm= result.RoleAccess.Permissions
    .Select(item => new ResourcePermissionModel()
    {
        ResourceId = Convert.ToInt32(item.Id),
        Permissions = GetPermissions(item.Actions)
        //Permissions = new Dictionary<LockboxService.Models.Enum.Permission, bool>
        //{
        //    { LockboxService.Models.Enum.Permission.Assign, item.Actions.Assign.Value },
        //    { LockboxService.Models.Enum.Permission.Delete, item.Actions.Delete.Value },
        //    { LockboxService.Models.Enum.Permission.Modify, item.Actions.Modify.Value },
        //    { LockboxService.Models.Enum.Permission.View, item.Actions.Use.Value }
        //}
    }).ToList();
private IEnumerable<Permission> GetPermissions(ResourceActionsBase actions)
{
//what to enter here?
}
0
Abhinav Goyal 17 Мар 2019 в 11:08

1 ответ

Лучший ответ

Вы можете использовать доходность:

private IEnumerable<Permission> GetPermissions(ResourceActionsBase actions)
{
    if (actions.Use.Value)
        yield return Permission.View;
    if (actions.Modify.Value)
        yield return Permission.Modify;
    if (actions.Delete.Value)
        yield return Permission.Delete;
    if (actions.Assign.Value)
        yield return Permission.Assign;
}

Вы можете добавить ToList() после вызова GetPermissions, иначе он будет выполняться с задержкой каждый раз, когда вы получаете Permissions от своего ResourcePermissionModel.

Также обратите внимание, что я думаю, что этот подход плохо масштабируется, если вы добавите больше разрешений. В этом случае может быть полезно, если вы действительно можете изменить модель или использовать статическое сопоставление свойств модели с значениями разрешений.

1
user1781290 17 Мар 2019 в 08:58