using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Traffic.Data.Models; using Traffic.Data.ViewModels; using Traffic.Repository.Infrastructures; using Traffic.Service.Interfaces; namespace Traffic.Service.Implements { public class RoleService : IRoleService { private readonly IUnitOfWork _unitOfWork; public RoleService(IUnitOfWork unitOfWork) { _unitOfWork = unitOfWork; } /// /// 新增權限 /// /// /// public TradeResultModel PostRoleDataList(int byWho, RoleData roleData) { var result = new TradeResultModel { Success = false }; try { roleData.RoleName = roleData.RoleName; roleData.CreatedOn = roleData.CreatedOn; roleData.CreatedOn = DateTime.UtcNow.AddHours(8); roleData.Status = roleData.Status; var role = new AccountRole() { RoleName = roleData.RoleName, CreatorId = byWho, CreatedOn = roleData.CreatedOn, }; var id = _unitOfWork.AccountRepository.InsertAccountRole(role); _unitOfWork.Complete(); } catch (Exception ex) { result.Message = ex.Message; return result; } result.Success = true; return result; } /// /// 取得所有權限清單 /// /// public PageViewModel> GetRoleDataList(SearchModel searchModel) { var roles = _unitOfWork.AccountRepository.GetAccountRoles(); if (!string.IsNullOrEmpty(searchModel.Term)) { roles = roles.Where(x => x.RoleName.Contains(searchModel.Term)); } int count = -1; int pageCount = -1; if (searchModel.Page == 1) { count = roles.Count(); if (count % 10 != 0) { pageCount = (count / searchModel.PageSize) + 1; } else { pageCount = count / searchModel.PageSize; } } switch (searchModel.Order) { case "Id": roles = searchModel.IsAsc ? roles.OrderBy(x => x.Id) : roles.OrderByDescending(x => x.Id); break; case "RoleName": roles = searchModel.IsAsc ? roles.OrderBy(x => x.RoleName).ThenBy(x => x.Id) : roles.OrderByDescending(x => x.RoleName).ThenByDescending(x => x.Id); break; default: goto case "Id"; } roles = roles.Skip((searchModel.Page - 1) * searchModel.PageSize).Take(searchModel.PageSize); var data = roles.ToList().Select(x => new RoleDataQuery { Id = x.Id, RoleName = x.RoleName, CreateID = x.CreatorId, CreateTime = x.CreatedOn.ToString(), }); return new PageViewModel> { RowCount = count, PageCount = pageCount, CurrentPage = searchModel.Page, Data = data, }; } /// /// 取得群組對應碼 /// /// public IEnumerable GetRoleInfoList() { var roles = _unitOfWork.AccountRepository.GetAccountRoles(); var result = roles.ToList().Select(x => new RoleCodeInfo { Id = x.Id, RoleName = x.RoleName }); return result; } /// /// 取得權限設定 /// /// /// public List GetRolePermissionInfo(int? roleId) { var rolePageList = _unitOfWork.RolePageRepository.GetRolePermissionInfo(roleId); var result = rolePageList.ToList().Select(x => new RolePermissionDataQuery { RoleId = x.RoleId, RoleName = x.RoleName, PageId = x.PageId, PageName = x.PageName }); return result.ToList(); } public List GetAllPagePermission(int roleId) { var pages = _unitOfWork.RolePageRepository.GetPageLists(); var PagePermission = new List(); var hasPermission = _unitOfWork.RolePageRepository.GetRolePageByRoleId(roleId); foreach (var item in pages) { if (hasPermission.Where(i=>i.PageId == item.Id).Any()) { PagePermission.Add(new PagePermissionDataQuery { PageId = item.Id, PageName = item.PageName, PageModule = item.PageModule, RoleId = roleId, PageUrl = item.PageURL, Enable = true }); } else { PagePermission.Add(new PagePermissionDataQuery { PageId = item.Id, PageName = item.PageName, PageModule = item.PageModule, RoleId = roleId, PageUrl = item.PageURL, Enable = false }); } } return PagePermission.ToList(); } /// /// 修改權限狀態 /// /// /// public bool PutPageRoleStatus(PagePermissionData pagePermission) { if (pagePermission.Enable) { _unitOfWork.RolePageRepository.InsertRolePage(new RolePage() { PageId = pagePermission.PageId, RoleId = pagePermission.RoleId }); _unitOfWork.Complete(); return true; } var rolePage = _unitOfWork.RolePageRepository.GetRolePages().Where(x => x.PageId == pagePermission.PageId && x.RoleId == pagePermission.RoleId).FirstOrDefault(); if (rolePage != null) { _unitOfWork.RolePageRepository.DeleteRolePage(rolePage.Id); _unitOfWork.Complete(); return true; } return false; } } }