예제 #1
0
        public async Task <PermissionSingleViewModel> ExecuteAsync(string functionId)
        {
            var getUserId = _httpContextAccessor.HttpContext.User.Identity.Name;

            List <Guid> listIdRole = new List <Guid>();
            List <PermissionSingleViewModel> permissionSingleVM = new List <PermissionSingleViewModel>();
            var userRoleIds = _roleManager.Roles.Select(x => new
            {
                Id   = x.Id,
                Name = x.Name,
            }).ToList();
            var user = await _userManager.FindByIdAsync(getUserId);

            if (user.UserName.ToLower() == "admin")
            {
                return(new PermissionSingleViewModel
                {
                    CanCreate = true,
                    CanDelete = true,
                    CanRead = true,
                    CanUpdate = true,
                    FunctionId = functionId
                });
            }
            var roles = await _userManager.GetRolesAsync(user);

            List <AppRoleViewModel> listRoleUser = new List <AppRoleViewModel>();

            if (roles.Count > 0)
            {
                foreach (var item in roles)
                {
                    var roleId = await _roleManager.Roles.Select(x => new AppRoleViewModel
                    {
                        Id          = x.Id,
                        Description = x.Description,
                        Name        = x.Name
                    }).Where(x => x.Name == item).FirstOrDefaultAsync();

                    listRoleUser.Add(roleId);
                }
            }
            if (listRoleUser.Count > 0)
            {
                foreach (var item in listRoleUser)
                {
                    var getPermissions = await _permissionRepository.FindSingleAsync(x => x.RoleId == item.Id && x.FunctionId == functionId);

                    if (getPermissions != null)
                    {
                        PermissionSingleViewModel tempPermission = new PermissionSingleViewModel();
                        tempPermission.Id         = getPermissions.Id;
                        tempPermission.RoleId     = getPermissions.RoleId;
                        tempPermission.FunctionId = getPermissions.FunctionId;
                        tempPermission.CanRead    = getPermissions.CanRead;
                        tempPermission.CanCreate  = getPermissions.CanCreate;
                        tempPermission.CanDelete  = getPermissions.CanDelete;
                        tempPermission.CanUpdate  = getPermissions.CanUpdate;
                        permissionSingleVM.Add(tempPermission);
                    }
                }
            }
            if (permissionSingleVM.Count == 0)
            {
                return(new PermissionSingleViewModel
                {
                    CanCreate = false,
                    CanDelete = false,
                    CanRead = false,
                    CanUpdate = false,
                    FunctionId = functionId
                });
            }
            return(GetDuplicate(permissionSingleVM));
        }
예제 #2
0
        private PermissionSingleViewModel GetDuplicate(List <PermissionSingleViewModel> permissionSingles)
        {
            PermissionSingleViewModel permission = new PermissionSingleViewModel();
            var getlistPerFunction = permissionSingles.ToList();

            if (getlistPerFunction.Count() > 1)
            {
                for (int i = 0; i < getlistPerFunction.Count - 1; i++)
                {
                    //Check case Can Create
                    if (getlistPerFunction[i].CanCreate != getlistPerFunction[i + 1].CanCreate &&
                        (getlistPerFunction[i].CanCreate == true || getlistPerFunction[i + 1].CanCreate == true))
                    {
                        permission.CanCreate = true;
                    }
                    else if (getlistPerFunction[i].CanCreate == getlistPerFunction[i + 1].CanCreate &&
                             getlistPerFunction[i].CanCreate == true)
                    {
                        permission.CanCreate = true;
                    }
                    else
                    {
                        permission.CanCreate = false;
                    }

                    //Check case can Read
                    if (getlistPerFunction[i].CanRead != getlistPerFunction[i + 1].CanRead &&
                        (getlistPerFunction[i].CanRead == true || getlistPerFunction[i + 1].CanRead == true))
                    {
                        permission.CanRead = true;
                    }
                    else if (getlistPerFunction[i].CanRead == getlistPerFunction[i + 1].CanRead &&
                             getlistPerFunction[i].CanRead == true)
                    {
                        permission.CanRead = true;
                    }
                    else
                    {
                        permission.CanRead = false;
                    }

                    //Check case can Update
                    if (getlistPerFunction[i].CanUpdate != getlistPerFunction[i + 1].CanUpdate &&
                        (getlistPerFunction[i].CanUpdate == true || getlistPerFunction[i + 1].CanUpdate == true))
                    {
                        permission.CanUpdate = true;
                    }
                    else if (getlistPerFunction[i].CanUpdate == getlistPerFunction[i + 1].CanUpdate &&
                             getlistPerFunction[i].CanUpdate == true)
                    {
                        permission.CanUpdate = true;
                    }
                    else
                    {
                        permission.CanUpdate = false;
                    }

                    //Check case can Delete
                    if (getlistPerFunction[i].CanDelete != getlistPerFunction[i + 1].CanDelete &&
                        (getlistPerFunction[i].CanDelete == true || getlistPerFunction[i + 1].CanDelete == true))
                    {
                        permission.CanDelete = true;
                    }
                    else if (getlistPerFunction[i].CanDelete == getlistPerFunction[i + 1].CanDelete &&
                             getlistPerFunction[i].CanDelete == true)
                    {
                        permission.CanDelete = true;
                    }
                    else
                    {
                        permission.CanDelete = false;
                    }
                }
            }
            else
            {
                return(permissionSingles.FirstOrDefault());
            }
            return(permission);
        }