Пример #1
0
        /// <summary>
        /// Получить список доступа на каждый элемент
        /// </summary>
        /// <param name="userName">Имя пользователя</param>
        /// <param name="formId">Режим для которого нужно выбрать доступ</param>
        /// <param name="isAll">Выбрать все записи (с удаленными)</param>
        /// <returns></returns>
        public async Task <IEnumerable <ButtonAccessDto> > GetButtonsAsync(string userName, int formId, bool isAll)
        {
            var models = isAll
                ? await _reportDbContext.ButtonForm.Where(f => f.FormId == formId).ToListAsync()
                : await _reportDbContext.ButtonForm.Where(f => f.FormId == formId && !(f.IsDeleted ?? false)).ToListAsync();

            var query = models.GroupJoin(
                await _accessManager.GetAccessButtonByFormAsync(userName, formId)
                , model => model.Id,
                accessForm => accessForm.ButtonFormId,
                (formModel, accessForms) => new { Button = formModel, Access = accessForms }).SelectMany(
                arg => arg.Access.DefaultIfEmpty(),
                (form, access) => new
            {
                form.Button,
                IsVisible = access == null || (int)access.TypeAccec > 2
            }).Where(f => f.IsVisible);

            return(query.Select(s =>
            {
                var item = Mapper.Map <ButtonAccessDto>(s.Button);
                return item;
            }).OrderBy(o => o.Order));
        }