2016-01-05 17:14:10 +08:00
|
|
|
|
// ***********************************************************************
|
2015-12-06 23:40:34 +08:00
|
|
|
|
// Assembly : OpenAuth.App
|
|
|
|
|
// Author : Yubao Li
|
|
|
|
|
// Created : 12-02-2015
|
|
|
|
|
//
|
|
|
|
|
// Last Modified By : Yubao Li
|
|
|
|
|
// Last Modified On : 12-02-2015
|
|
|
|
|
// ***********************************************************************
|
|
|
|
|
// <copyright file="ModuleElementManagerApp.cs" company="">
|
|
|
|
|
// Copyright (c) . All rights reserved.
|
|
|
|
|
// </copyright>
|
|
|
|
|
// <summary>模块元素</summary>
|
|
|
|
|
// ***********************************************************************
|
|
|
|
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Infrastructure;
|
|
|
|
|
using OpenAuth.App.ViewModel;
|
|
|
|
|
using OpenAuth.Domain;
|
|
|
|
|
using OpenAuth.Domain.Interface;
|
|
|
|
|
|
|
|
|
|
namespace OpenAuth.App
|
|
|
|
|
{
|
|
|
|
|
public class ModuleElementManagerApp
|
|
|
|
|
{
|
|
|
|
|
private readonly IRepository<ModuleElement> _repository;
|
|
|
|
|
private IModuleRepository _moduleRepository;
|
|
|
|
|
private IRelevanceRepository _relevanceRepository;
|
|
|
|
|
|
|
|
|
|
public ModuleElementManagerApp(IRepository<ModuleElement> repository,
|
|
|
|
|
IRelevanceRepository relevanceRepository,
|
|
|
|
|
IModuleRepository moduleRepository )
|
|
|
|
|
{
|
|
|
|
|
_repository = repository;
|
|
|
|
|
_moduleRepository = moduleRepository;
|
|
|
|
|
_relevanceRepository = relevanceRepository;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void AddOrUpdate(ModuleElement model)
|
|
|
|
|
{
|
2015-12-16 22:52:23 +08:00
|
|
|
|
var newbtn = new ModuleElement();
|
|
|
|
|
model.CopyTo(newbtn);
|
2015-12-06 23:40:34 +08:00
|
|
|
|
if (model.Id == 0)
|
|
|
|
|
{
|
2016-01-14 17:30:29 +08:00
|
|
|
|
_repository.Add(newbtn);
|
2015-12-06 23:40:34 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2016-01-14 17:30:29 +08:00
|
|
|
|
_repository.Update(newbtn);
|
2015-12-06 23:40:34 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public IEnumerable<ModuleElement> LoadByModuleId(int id)
|
|
|
|
|
{
|
2016-01-07 11:47:43 +08:00
|
|
|
|
var modules = _repository.Find(u => u.ModuleId == id).OrderBy(u =>u.Sort);
|
2015-12-06 23:40:34 +08:00
|
|
|
|
return modules;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 获取带有授权状态的菜单列表
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="accessType">授权类型,当前有RoleElement/UserElement</param>
|
|
|
|
|
/// <param name="firstId">
|
|
|
|
|
/// 当为RoleElement时,表示RoleId
|
|
|
|
|
/// 当为UserElement时,表示UserId
|
|
|
|
|
/// </param>
|
|
|
|
|
/// <param name="moduleId">模块ID</param>
|
|
|
|
|
public List<ModuleElementVM> LoadWithAccess(string accessType, int firstId, int moduleId)
|
|
|
|
|
{
|
|
|
|
|
//TODO:多个Repository使用的是不同的Context不能进行联表查询,要用UnitOfWork处理
|
2015-12-22 15:04:15 +08:00
|
|
|
|
|
2015-12-06 23:40:34 +08:00
|
|
|
|
var listVms = new List<ModuleElementVM>();
|
|
|
|
|
if (moduleId == 0) return listVms;
|
|
|
|
|
string modulename = _moduleRepository.FindSingle(u => u.Id == moduleId).Name;
|
|
|
|
|
|
|
|
|
|
foreach (var element in LoadByModuleId(moduleId))
|
|
|
|
|
{
|
|
|
|
|
var accessed = _relevanceRepository.FindSingle(u =>u.Key == accessType
|
|
|
|
|
&& u.FirstId == firstId && u.SecondId == element.Id);
|
|
|
|
|
ModuleElementVM vm = new ModuleElementVM
|
|
|
|
|
{
|
|
|
|
|
Id = element.Id,
|
|
|
|
|
Name = element.Name,
|
|
|
|
|
ModuleId = element.ModuleId,
|
|
|
|
|
DomId = element.DomId,
|
|
|
|
|
ModuleName = modulename,
|
|
|
|
|
Accessed = accessed != null
|
|
|
|
|
};
|
|
|
|
|
listVms.Add(vm);
|
|
|
|
|
}
|
|
|
|
|
return listVms;
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-11 23:48:11 +08:00
|
|
|
|
public void Delete(ModuleElement[] objs)
|
2015-12-06 23:40:34 +08:00
|
|
|
|
{
|
2016-04-11 23:48:11 +08:00
|
|
|
|
var delIds = objs.Select(u => u.Id).ToList();
|
|
|
|
|
_repository.Delete(u =>delIds.Contains(u.Id));
|
2015-12-06 23:40:34 +08:00
|
|
|
|
}
|
2015-12-07 15:22:01 +08:00
|
|
|
|
|
2016-04-15 17:49:21 +08:00
|
|
|
|
public void AssignForRole(int roleId, int[] menuIds)
|
2015-12-07 15:22:01 +08:00
|
|
|
|
{
|
|
|
|
|
_relevanceRepository.AddRelevance("RoleElement", menuIds.ToLookup(u => roleId));
|
|
|
|
|
}
|
|
|
|
|
|
2016-04-15 17:49:21 +08:00
|
|
|
|
public void CancelForRole(int roleId, int[] ids)
|
|
|
|
|
{
|
|
|
|
|
_relevanceRepository.Delete(u => ids.Contains(u.SecondId) && u.Key == "RoleElement" && u.FirstId == roleId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void AssignForUser(int userId, int[] ids)
|
2015-12-07 15:22:01 +08:00
|
|
|
|
{
|
|
|
|
|
_relevanceRepository.AddRelevance("UserElement", ids.ToLookup(u => userId));
|
|
|
|
|
}
|
2016-04-15 17:49:21 +08:00
|
|
|
|
|
|
|
|
|
public void CancelForUser(int userId, int[] ids)
|
|
|
|
|
{
|
|
|
|
|
_relevanceRepository.Delete(u => ids.Contains(u.SecondId) && u.Key == "UserElement" && u.FirstId == userId);
|
|
|
|
|
}
|
2015-12-06 23:40:34 +08:00
|
|
|
|
}
|
|
|
|
|
}
|