1 check issue #12

2 修改登录为Identity认证方式
This commit is contained in:
yubaolee
2016-04-21 10:54:05 +08:00
parent 9c8b6f8629
commit 2d13810c82
14 changed files with 233 additions and 140 deletions

View File

@@ -1,115 +1,61 @@
using Infrastructure;
using OpenAuth.App.ViewModel;
using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
using System;
using System;
using System.Linq;
using System.Web;
using Infrastructure;
using OpenAuth.App.ViewModel;
using System.Web.Security;
using OpenAuth.Domain.Service;
namespace OpenAuth.App
{
public class LoginApp
{
private IUserRepository _repository;
private IModuleRepository _moduleRepository;
private IRelevanceRepository _relevanceRepository;
private IRepository<ModuleElement> _moduleElementRepository;
private IResourceRepository _resourceRepository;
private IOrgRepository _orgRepository;
private AuthoriseService _service;
public LoginApp(IUserRepository repository,
IModuleRepository moduleRepository,
IRelevanceRepository relevanceRepository,
IRepository<ModuleElement> moduleElementRepository,
IResourceRepository resourceRepository,
IOrgRepository orgRepository)
public LoginApp(AuthoriseService service)
{
_repository = repository;
_moduleRepository = moduleRepository;
_relevanceRepository = relevanceRepository;
_moduleElementRepository = moduleElementRepository;
_resourceRepository = resourceRepository;
_orgRepository = orgRepository;
_service = service;
}
public LoginUserVM Login(string userName, string password)
public void Login(string userName, string password)
{
var user = _repository.FindSingle(u => u.Account == userName);
if (user == null)
{
throw new Exception("用户帐号不存在");
}
user.CheckPassword(password);
_service.Check(userName, password);
FormsAuthentication.SetAuthCookie(userName, true);
var loginVM = new LoginUserVM
{
User = user
};
//用户角色
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();
//得出最终用户拥有的模块
loginVM.Modules = _moduleRepository.Find(u => moduleIds.Contains(u.Id)).OrderBy(u => u.SortNo).MapToList<ModuleView>();
//模块菜单权限
foreach (var module in loginVM.Modules)
{
module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id && elementIds.Contains(u.Id)).OrderBy(u => u.Sort).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();
loginVM.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();
loginVM.AccessedOrgs = _orgRepository.Find(u => orgids.Contains(u.Id)).ToList();
return loginVM;
}
/// <summary>
/// 开发者登陆
/// </summary>
public LoginUserVM LoginByDev()
public void LoginByDev()
{
var loginUser = new LoginUserVM
_service.SetSysUser();
FormsAuthentication.SetAuthCookie("System", true);
}
public LoginUserVM GetLoginUser()
{
if (!HttpContext.Current.User.Identity.IsAuthenticated)
{
User = new User
{
Name = "开发者账号",
Account = "System"
}
throw new Exception("未登录");
}
string username = HttpContext.Current.User.Identity.Name;
_service.GetUserAccessed(username);
var user = new LoginUserVM
{
User = _service.User,
AccessedOrgs = _service.Orgs,
Modules = _service.Modules.MapToList<ModuleView>(),
Resources = _service.Resources,
};
loginUser.Modules = _moduleRepository.Find(null).MapToList<ModuleView>();
//模块包含的菜单
foreach (var module in loginUser.Modules)
foreach (var moduleView in user.Modules)
{
module.Elements = _moduleElementRepository.Find(u => u.ModuleId == module.Id).OrderBy(u => u.Sort).ToList();
moduleView.Elements = _service.ModuleElements.Where(u => u.ModuleId == moduleView.Id).OrderBy(u => u.Sort).ToList();
}
loginUser.Resources = _resourceRepository.Find(null).OrderBy(u => u.SortNo).ToList();
loginUser.AccessedOrgs = _orgRepository.Find(null).OrderBy(u => u.SortNo).ToList();
return loginUser;
return user;
}
}
}

View File

@@ -27,38 +27,38 @@ namespace OpenAuth.App
public dynamic Load(int orgId, int pageindex, int pagesize)
{
IEnumerable<Stock> Stocks;
var user = SessionHelper.GetSessionUser<LoginUserVM>();
var loginOrgs = user.AccessedOrgs.Select(u => u.Id).ToArray();
//var user = AutofacExt.GetFromFac<LoginApp>().GetLoginUser();
//var loginOrgs = user.AccessedOrgs.Select(u => u.Id).ToArray();
int total;
if (orgId == 0)
{
//int total;
//if (orgId == 0)
//{
if (loginOrgs.Length == 0) //改用户没有任何可见机构
{
Stocks = _repository.Find(pageindex, pagesize, "", u => u.User == user.User.Account);
total = _repository.GetCount(u =>u.User ==user.User.Account);
}
else
{
Stocks = _repository.LoadInOrgs(pageindex, pagesize, loginOrgs);
total = _repository.GetStockCntInOrgs(loginOrgs);
}
// if (loginOrgs.Length == 0) //改用户没有任何可见机构
// {
// Stocks = _repository.Find(pageindex, pagesize, "", u => u.User == user.User.Account);
// total = _repository.GetCount(u =>u.User ==user.User.Account);
// }
// else
// {
// Stocks = _repository.LoadInOrgs(pageindex, pagesize, loginOrgs);
// total = _repository.GetStockCntInOrgs(loginOrgs);
// }
}
else //加载选择的机构及用户可访问的所有子机构
{
var orgs = _orgRepository.GetSubOrgs(orgId).Where(u =>loginOrgs.Contains(u.Id));
List<int> orgIds = orgs.Select(u => u.Id).ToList();
orgIds.Add(orgId);
Stocks = _repository.LoadInOrgs(pageindex, pagesize, orgIds.ToArray());
total = _repository.GetStockCntInOrgs(orgIds.ToArray());
}
//}
//else //加载选择的机构及用户可访问的所有子机构
//{
// var orgs = _orgRepository.GetSubOrgs(orgId).Where(u =>loginOrgs.Contains(u.Id));
// List<int> orgIds = orgs.Select(u => u.Id).ToList();
// orgIds.Add(orgId);
// Stocks = _repository.LoadInOrgs(pageindex, pagesize, orgIds.ToArray());
// total = _repository.GetStockCntInOrgs(orgIds.ToArray());
//}
return new
{
total = total,
list = Stocks,
// total = total,
// list = Stocks,
pageCurrent = pageindex
};
}