private void CompareRolePermissionsAndUpdateDatabase( Dictionary <Guid, List <Guid> > collectionOne, Dictionary <Guid, List <Guid> > collectionTwo) { //stage 0: check deleting and addditional Dictionary <Guid, List <Guid> > deletedPair = new Dictionary <Guid, List <Guid> >(); Dictionary <Guid, List <Guid> > additionalPair = new Dictionary <Guid, List <Guid> >(); foreach (Guid key in collectionOne.Keys) { IEnumerable <Guid> exceptDeleted = collectionOne[key].Except(collectionTwo[key]); foreach (Guid item in exceptDeleted) { deletedPair.AddWithKey(key, item); } IEnumerable <Guid> exceptAdditional = collectionTwo[key].Except(collectionOne[key]); foreach (Guid item in exceptAdditional) { additionalPair.AddWithKey(key, item); } } using RolePermissionData data = new RolePermissionData(settings.ConnectionString); //stage 1: add new pairs in DB foreach (Guid key in additionalPair.Keys) { foreach (Guid value in additionalPair[key]) { data.InsertData(new RolePermissionModel() { ID = Guid.NewGuid(), RoleGuid = key, PermissionGuid = value }, nameof(SQLEnums.StoredProcedureNames.азрешенияРолейДобавить)); } } //stage 2: delete old pairs in DB foreach (Guid key in deletedPair.Keys) { foreach (Guid value in deletedPair[key]) { data.DeleteDataByRoleGuidAndPermissionGuid(key, value); } } }
/// <summary> /// 删除角色权限(不使用标记删除) /// </summary> /// <param name="userId"></param> /// <param name="roleId"></param> /// <returns></returns> public async Task <OutputDto> DeleteRolePermissionAsync(RolePermissionData data) { return(await _rolePermissionRepository.DeleteAsync(v => v.RoleId.Equals(data.RoleId) && v.PermissionId.Equals(data.PermissionId))); }