OpenAuth.Net/OpenAuth.App/RoleManagerApp.cs
yubaolee 56d5ea0e8a 更改PDM文件
删除为用户分配可见机构(本身有机构功能)
删除为角色分配机构(本身有机构多对多功能)
2016-09-04 23:34:16 +08:00

153 lines
5.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using OpenAuth.App.ViewModel;
using OpenAuth.Domain;
using OpenAuth.Domain.Interface;
using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using Newtonsoft.Json.Linq;
namespace OpenAuth.App
{
public class RoleManagerApp
{
private IRoleRepository _repository;
private IOrgRepository _orgRepository;
private IRelevanceRepository _relevanceRepository;
public RoleManagerApp(IRoleRepository repository,
IOrgRepository orgRepository,
IRelevanceRepository relevanceRepository)
{
_repository = repository;
_orgRepository = orgRepository;
_relevanceRepository = relevanceRepository;
}
public int GetRoleCntInOrg(Guid orgId)
{
if (orgId == Guid.Empty)
{
return _repository.Find(null).Count();
}
else
{
return _repository.GetRoleCntInOrgs(GetSubOrgIds(orgId));
}
}
/// <summary>
/// 加载一个部门及子部门全部Roles
/// </summary>
public GridData Load(Guid orgId, int pageindex, int pagesize)
{
if (pageindex < 1) pageindex = 1; //TODO:如果列表为空新增加一个用户后前端会传一个0过来奇怪
IEnumerable<Role> roles;
int total = 0;
if (orgId == Guid.Empty)
{
roles = _repository.LoadRoles(pageindex, pagesize);
total = _repository.GetCount();
}
else
{
roles = _repository.LoadInOrgs(pageindex, pagesize, GetSubOrgIds(orgId));
total = _repository.GetRoleCntInOrgs(orgId);
}
var rolevms = new List<RoleVM>();
foreach (var role in roles)
{
RoleVM rolevm = role;
var orgs = _orgRepository.LoadByRole(role.Id);
rolevm.Organizations = string.Join(",", orgs.Select(u => u.Name).ToList());
rolevm.OrganizationIds = string.Join(",", orgs.Select(u => u.Id).ToList());
rolevms.Add(rolevm);
}
var result = new GridData
{
total = total,
list = rolevms.ToList(),
pageCurrent = pageindex
};
return result;
}
/// <summary>
/// 获取当前组织的所有下级组织
/// </summary>
private Guid[] GetSubOrgIds(Guid orgId)
{
var org = _orgRepository.FindSingle(u => u.Id == orgId);
var orgs = _orgRepository.Find(u => u.CascadeId.Contains(org.CascadeId)).Select(u => u.Id).ToArray();
return orgs;
}
public Role Find(Guid id)
{
var role = _repository.FindSingle(u => u.Id == id);
if (role == null) role = new Role();
return role;
}
public void Delete(Guid id)
{
_repository.Delete(id);
}
public void AddOrUpdate(JObject obj)
{
var role = obj.ToObject<Role>();
if (role.Id == Guid.Empty)
{
role.CreateTime = DateTime.Now;
_repository.Add(role);
}
else
{
_repository.Update(role);
}
Guid[] orgIds = obj["OrganizationIds"].ToString().Split(',').Select(id => Guid.Parse(id)).ToArray();
_relevanceRepository.DeleteBy("RoleOrg", role.Id);
_relevanceRepository.AddRelevance("RoleOrg", orgIds.ToLookup(u => role.Id));
}
public List<RoleVM> LoadForOrgAndUser(Guid orgId, Guid userId)
{
var allorgs = GetSubOrgIds(orgId);
var roles = _relevanceRepository.Find(u => u.Key == "RoleOrg"
&& allorgs.Contains(u.SecondId)).Select(u =>u.FirstId).ToList(); //机构关联的角色
var roleIds = _repository.Find(u => orgId == Guid.Empty
|| (roles.Contains(u.Id))).ToList(); //从角色表里获取
var rolevms = new List<RoleVM>();
foreach (var role in roleIds)
{
RoleVM rolevm = role;
rolevm.IsBelongUser = (_relevanceRepository.FindSingle(u => u.SecondId == role.Id
&& u.FirstId == userId
&& u.Key == "UserRole")
!= null);
var orgs = _orgRepository.LoadByRole(role.Id);
rolevm.Organizations = string.Join(",", orgs.Select(u => u.Name).ToList());
rolevm.OrganizationIds = string.Join(",", orgs.Select(u => u.Id).ToList());
rolevms.Add(rolevm);
}
return rolevms;
}
public void AccessRole(Guid userId, Guid[] roleIds)
{
_relevanceRepository.AddRelevance("UserRole", roleIds.ToLookup(roleId => userId));
}
public void DelAccessRole(Guid userId, Guid[] roleids)
{
_relevanceRepository.DeleteBy("UserRole", roleids.ToLookup(roleId => userId));
}
}
}