修正因合并多对多映射造成的BUG

This commit is contained in:
yubaolee
2015-11-30 14:54:38 +08:00
parent 464f04bb32
commit afceafb00c
13 changed files with 268 additions and 192 deletions

View File

@@ -1,10 +1,10 @@
using Infrastructure;
using OpenAuth.App.ViewModel;
using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using Infrastructure;
namespace OpenAuth.App
{
@@ -51,13 +51,7 @@ namespace OpenAuth.App
/// </summary>
public List<Module> LoadForTree()
{
return _repository.Find(null).ToList();
}
public List<Module> LoadForUser(int userId)
{
var moduleIds = _relevanceRepository.Find(u => u.FirstId == userId).Select(u => u.SecondId).ToList();
if(!moduleIds.Any()) return null;
return _repository.Find(u => moduleIds.Contains(u.Id)).ToList();
return _repository.Find(null).ToList();
}
public List<Module> LoadForNav()
@@ -114,12 +108,60 @@ namespace OpenAuth.App
}
}
public void AccessModules(int userId, int[] ids)
#region /
/// <summary>
/// 加载特定用户的模块
/// </summary>
/// <param name="userId">The user unique identifier.</param>
public List<Module> LoadForUser(int userId)
{
_relevanceRepository.DeleteBy("UserModule",userId);
_relevanceRepository.AddRelevance("UserModule",ids.ToDictionary(u =>userId));
var moduleIds =
_relevanceRepository.Find(u => u.FirstId == userId && u.Key == "UserModule")
.Select(u => u.SecondId)
.ToList();
if (!moduleIds.Any()) return null;
return _repository.Find(u => moduleIds.Contains(u.Id)).ToList();
}
/// <summary>
/// 为特定的用户分配模块
/// </summary>
/// <param name="userId">The user unique identifier.</param>
/// <param name="ids">模块ID</param>
public void AssignModuleForUser(int userId, int[] ids)
{
_relevanceRepository.DeleteBy("UserModule", userId);
_relevanceRepository.AddRelevance("UserModule", ids.ToLookup(u => userId));
}
/// <summary>
/// 加载特定角色的模块
/// </summary>
/// <param name="roleId">The role unique identifier.</param>
public List<Module> LoadForRole(int roleId)
{
var moduleIds =
_relevanceRepository.Find(u => u.FirstId == roleId && u.Key == "RoleModule")
.Select(u => u.SecondId)
.ToList();
if (!moduleIds.Any()) return null;
return _repository.Find(u => moduleIds.Contains(u.Id)).ToList();
}
/// <summary>
/// 为特定的角色分配模块
/// </summary>
/// <param name="roleId">The user unique identifier.</param>
/// <param name="ids">模块ID</param>
public void AssignModuleForRole(int roleId, int[] ids)
{
_relevanceRepository.DeleteBy("RoleModule", roleId);
_relevanceRepository.AddRelevance("RoleModule", ids.ToLookup(u => roleId));
}
#endregion /
#region
//根据同一级中最大的语义ID
@@ -166,7 +208,5 @@ namespace OpenAuth.App
}
#endregion
}
}

View File

@@ -4,7 +4,6 @@ using OpenAuth.Domain.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Security;
namespace OpenAuth.App
{
@@ -53,7 +52,6 @@ namespace OpenAuth.App
total = _repository.GetRoleCntInOrgs(orgId);
}
return new
{
total = total,
@@ -77,7 +75,6 @@ namespace OpenAuth.App
var role = _repository.FindSingle(u => u.Id == id);
if (role == null) role = new Role();
return role;
}
public void Delete(int id)
@@ -96,10 +93,8 @@ namespace OpenAuth.App
{
_repository.Update(role);
}
}
public List<RoleVM> LoadWithUser(int userId)
{
var roleIds = _repository.Find(null).ToList();
@@ -108,9 +103,9 @@ namespace OpenAuth.App
{
RoleVM rolevm = role;
rolevm.IsBelongUser = (_relevanceRepository.FindSingle(u => u.SecondId == role.Id
&& u.FirstId == userId
&& u.Key =="UserRole")
!=null);
&& u.FirstId == userId
&& u.Key == "UserRole")
!= null);
rolevms.Add(rolevm);
}
return rolevms;
@@ -120,7 +115,7 @@ namespace OpenAuth.App
{
_relevanceRepository.DeleteBy("UserRole", userId);
_relevanceRepository.AddRelevance("UserRole",roleIds.ToDictionary(roleId => userId));
_relevanceRepository.AddRelevance("UserRole", roleIds.ToLookup(roleId => userId));
}
}
}

View File

@@ -116,7 +116,7 @@ namespace OpenAuth.App
int[] orgIds = view.OrganizationIds.Split(',').Select(id => int.Parse(id)).ToArray();
_relevanceRepository.DeleteBy("UserOrg", user.Id);
_relevanceRepository.AddRelevance("UserOrg", orgIds.ToDictionary(u =>user.Id));
_relevanceRepository.AddRelevance("UserOrg", orgIds.ToLookup(u =>user.Id));
}
}