Esempio n. 1
0
        /// <summary>
        /// Получить список режимов, для которых у роли есть разрешения
        /// </summary>
        /// <param name="userName">Имя пользователя</param>
        /// <param name="isAll">Выбрать все записи (с удаленными)</param>
        /// <returns>Список доступных режимов для пользователя</returns>
        public async Task <IEnumerable <FormModelDto> > GetFormsAsunc(string userName, bool isAll)
        {
            var models = isAll
                ? await _reportDbContext.FormModel.ToListAsync()
                : await _reportDbContext.FormModel.Where(f => !(f.IsDeleted ?? false)).ToListAsync();

            var query = models.GroupJoin(
                await _accessManager.GetAccessFormsAsync(userName)
                , model => model.Id,
                accessForm => accessForm.FormModelId,
                (formModel, accessForms) => new { Form = formModel, Access = accessForms }).SelectMany(
                arg => arg.Access.DefaultIfEmpty(),
                (form, access) => new
            {
                form.Form,
                IsVisible = access == null || new[] { TypeAccec.Full, TypeAccec.ReadOnly }.Contains(access.TypeAccec)
            }).Where(f => f.IsVisible);

            return(query.Select(s => s.Form.Map <FormModelDto>()).OrderBy(o => o.Order).ToList());
        }