OpenAuth.Net/OpenAuth.Domain/Service/AuthoriseService.cs
yubaolee 2de1fb6433 1.0正式版
修复beta版未能解决的BUG;
全面修改页面结构,采用面向对象JS开发;
优化进出库管理示例,对资源的应用更加清晰;
完整的SQL初始数据;
2016-04-21 15:48:38 +08:00

148 lines
5.5 KiB
C#

// ***********************************************************************
// Assembly : OpenAuth.Domain
// Author : yubaolee
// Created : 04-21-2016
//
// Last Modified By : yubaolee
// Last Modified On : 04-21-2016
// Contact : Microsoft
// File: AuthenService.cs
// ***********************************************************************
using OpenAuth.Domain.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
namespace OpenAuth.Domain.Service
{
/// <summary>
/// 领域服务
/// <para>用户授权服务</para>
/// </summary>
public class AuthoriseService
{
private IUserRepository _repository;
private IModuleRepository _moduleRepository;
private IRelevanceRepository _relevanceRepository;
private IRepository<ModuleElement> _moduleElementRepository;
private IResourceRepository _resourceRepository;
private IOrgRepository _orgRepository;
private User _user;
private List<Module> _modules; //用户可访问的模块
private List<ModuleElement> _moduleElements; //用户可访问的菜单
private List<Resource> _resources; //用户可访问的资源
private List<Org> _orgs; //用户可访问的机构
public AuthoriseService(IUserRepository repository,
IModuleRepository moduleRepository,
IRelevanceRepository relevanceRepository,
IRepository<ModuleElement> moduleElementRepository,
IResourceRepository resourceRepository,
IOrgRepository orgRepository)
{
_repository = repository;
_moduleRepository = moduleRepository;
_relevanceRepository = relevanceRepository;
_moduleElementRepository = moduleElementRepository;
_resourceRepository = resourceRepository;
_orgRepository = orgRepository;
}
public List<Module> Modules
{
get { return _modules; }
}
public List<ModuleElement> ModuleElements
{
get { return _moduleElements; }
}
public List<Resource> Resources
{
get { return _resources; }
}
public List<Org> Orgs
{
get { return _orgs; }
}
public User User
{
get { return _user; }
}
public void Check(string userName, string password)
{
var _user = _repository.FindSingle(u => u.Account == userName);
if (_user == null)
{
throw new Exception("用户帐号不存在");
}
_user.CheckPassword(password);
}
/// <summary>
/// 设置开发者账号
/// </summary>
public void SetSysUser()
{
_user = new User
{
Account = "System"
};
}
public void GetUserAccessed(string name)
{
if (name == "System")
{
_modules = _moduleRepository.Find(null).ToList();
_moduleElements = _moduleElementRepository.Find(null).ToList();
_resources = _resourceRepository.Find(null).OrderBy(u => u.SortNo).ToList();
_orgs = _orgRepository.Find(null).OrderBy(u => u.SortNo).ToList();
}
else
{
_user = _repository.FindSingle(u => u.Account == name);
//用户角色
var userRoleIds = _relevanceRepository.Find(u => u.FirstId == _user.Id && u.Key == "UserRole").Select(u => u.SecondId).ToList();
//用户角色与自己分配到的模块ID
var moduleIds = _relevanceRepository.Find(
u =>
(u.FirstId == _user.Id && u.Key == "UserModule") ||
(u.Key == "RoleModule" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
//用户角色与自己分配到的菜单ID
var elementIds = _relevanceRepository.Find(
u =>
(u.FirstId == _user.Id && u.Key == "UserElement") ||
(u.Key == "RoleElement" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
//得出最终用户拥有的模块
_modules = _moduleRepository.Find(u => moduleIds.Contains(u.Id)).OrderBy(u => u.SortNo).ToList();
//模块菜单权限
_moduleElements = _moduleElementRepository.Find(u => elementIds.Contains(u.Id)).ToList();
//用户角色与自己分配到的资源ID
var resourceIds = _relevanceRepository.Find(
u =>
(u.FirstId == _user.Id && u.Key == "UserResource") ||
(u.Key == "RoleResource" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
_resources = _resourceRepository.Find(u => resourceIds.Contains(u.Id)).ToList();
//用户角色与自己分配到的机构ID
var orgids = _relevanceRepository.Find(
u =>
(u.FirstId == _user.Id && u.Key == "UserAccessedOrg") ||
(u.Key == "RoleAccessedOrg" && userRoleIds.Contains(u.FirstId))).Select(u => u.SecondId).ToList();
_orgs = _orgRepository.Find(u => orgids.Contains(u.Id)).ToList();
}
}
}
}