// ***********************************************************************
// Assembly : OpenAuth.Domain
// Author : yubaolee
// Created : 05-27-2016
//
// Last Modified By : yubaolee
// Last Modified On : 05-27-2016
// Contact : Microsoft
// File: ModuleEleManService.cs
// ***********************************************************************
using System.Collections.Generic;
using System.Linq;
using OpenAuth.Domain.Interface;
namespace OpenAuth.Domain.Service
{
///
/// 领域服务
/// 模块菜单管理服务
///
public class ModuleEleManService
{
private readonly IUnitWork _unitWork;
private readonly AuthoriseService _authoriseService;
public ModuleEleManService(IUnitWork unitWork, AuthoriseService authoriseService)
{
_unitWork = unitWork;
_authoriseService = authoriseService;
}
public void AddOrUpdate(ModuleElement model)
{
if (model.Id == 0)
{
_unitWork.Add(model);
}
else
{
_unitWork.Update(model);
}
_unitWork.Save();
}
public IEnumerable LoadByModuleId(string loginuser, int id)
{
_authoriseService.LoadAuthControls(loginuser);
if (_authoriseService.ModuleElements.Count == 0) //用户没有任何资源
{
return new List();
}
var modules = _authoriseService.ModuleElements.Where(u => u.ModuleId == id).OrderBy(u =>u.Sort);
return modules;
}
///
/// 获取带有授权状态的菜单列表
///
/// 当前登录的操作人
/// 授权类型,当前有RoleElement/UserElement
///
/// 当为RoleElement时,表示RoleId
/// 当为UserElement时,表示UserId
///
/// 模块ID
public List LoadWithAccess(string username, string accessType, int firstId, int moduleId)
{
var listVms = new List();
_authoriseService.LoadAuthControls(username);
if (_authoriseService.ModuleElements.Count == 0) //用户没有任何资源
{
return listVms;
}
if (moduleId == 0) return listVms;
string modulename = _authoriseService.Modules.SingleOrDefault(u => u.Id == moduleId).Name;
foreach (var element in _authoriseService.ModuleElements.Where(u =>u.ModuleId ==moduleId))
{
var accessed = _unitWork.FindSingle(u =>u.Key == accessType
&& u.FirstId == firstId && u.SecondId == element.Id);
var vm = new
{
Id = element.Id,
Name = element.Name,
ModuleId = element.ModuleId,
DomId = element.DomId,
ModuleName = modulename,
Accessed = accessed != null
};
listVms.Add(vm);
}
return listVms;
}
public void Delete(ModuleElement[] objs)
{
var delIds = objs.Select(u => u.Id).ToList();
_unitWork.Delete(u =>delIds.Contains(u.Id));
}
}
}