Former-commit-id: fcca630091e37db3159d63d8bce99126f3c9bb47
Former-commit-id: 72f08c117211bbd53cbb050955f3d5d4384b8715
1.0
wanggang 4 years ago
parent c53ca38b01
commit 865eb6aae4

@ -18,7 +18,7 @@ namespace Infrastructure.Extensions
public static Guid? GetOrganId(this ClaimsPrincipal user)
{
var value = user.Claims.FirstOrDefault(o => o.Type == ClaimTypes.UserData)?.Value;
var value = user.Claims.FirstOrDefault(o => o.Type == "OrganId")?.Value;
return Guid.TryParse(value, out Guid id) ? id : null;
}
}

@ -33,7 +33,7 @@ namespace Infrastructure.Web
using var scope = this._serviceProvider.CreateScope();
var userService = scope.ServiceProvider.GetService<IUserService>();
var organId = claims.FirstOrDefault(o => o.Type == ClaimTypes.UserData)?.Value;
var organId = claims.FirstOrDefault(o => o.Type == "OrganId")?.Value;
if (!string.IsNullOrEmpty(organId))
{
var organs = userService.GetOrgans(userName);

@ -1,4 +1,5 @@
using Application.Domain.Entities;
using System;
using System.Collections.Generic;
using System.Security.Claims;
@ -13,5 +14,6 @@ namespace Platform.Api
public List<AppModule> Modules { get; set; }
public List<Organ> Organs { get; set; }
public ClaimsIdentity User { get; set; }
public Guid? CurrentOrganId { get; set; }
}
}

@ -52,6 +52,7 @@ namespace Platform.Api
Version = Helper.Instance.GetVersion(),
Modules = modules,
Organs = organs,
CurrentOrganId = User.GetOrganId(),
User = User == null ? null : User.Identity as ClaimsIdentity
};
if (platformUser != null && model.User != null)

@ -1,3 +1,4 @@
using Application.Domain.Entities;
using Infrastructure.Application.Services.Settings;
using Infrastructure.Data;
using Infrastructure.Email;
@ -6,7 +7,6 @@ using Infrastructure.Security;
using Infrastructure.Sms;
using Infrastructure.Web;
using Infrastructure.Web.DataAnnotations;
using Application.Domain.Entities;
using IoT.Shared.Application.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Hosting;
@ -17,8 +17,8 @@ using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using Platform.Areas.IoTCenter.Controllers;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
@ -27,7 +27,6 @@ using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using Microsoft.IdentityModel.Tokens;
namespace Platform.Controllers
{
@ -201,10 +200,10 @@ namespace Platform.Controllers
//new Claim("RealName", user.RealName),
//new Claim("Avatar", user.Avatar)
};
var mainOrgan = user.OrganUsers.FirstOrDefault(o => o.IsDefault)?.Organ ?? user.OrganUsers.OrderBy(o => o.Organ.Name).FirstOrDefault()?.Organ;
if(mainOrgan!=null)
var userMainOrgan = user.OrganUsers.OrderByDescending(o=>o.IsDefault).ThenBy(o => o.OrganId).FirstOrDefault();
if (userMainOrgan != null)
{
claims.Add(new Claim(ClaimTypes.UserData, mainOrgan.Id.ToString()));
claims.Add(new Claim("OrganId", userMainOrgan.OrganId.ToString()));
}
if (this.IsJsonRequest())
{
@ -945,13 +944,52 @@ namespace Platform.Controllers
public IActionResult ChangeOrgan(string userCurrentOrganNumber, string returnUrl)
{
var claims = new List<Claim> {
new Claim(this._parameters.NameClaimType, User.Identity.Name),
new Claim(ClaimTypes.UserData,userCurrentOrganNumber)
};
this.HttpContext.JwtSignOut();
this.HttpContext.JwtSignIn(claims, false);
return Redirect(returnUrl);
var message = string.Empty;
if (Guid.TryParse(userCurrentOrganNumber, out var organId))
{
var userName = User.Identity.Name;
var user = this._userRepo.ReadOnlyTable().Where(o => o.UserName == userName).Include(o => o.OrganUsers).FirstOrDefault();
if (user != null)
{
if (user.OrganUsers.Any(o => o.OrganId == organId))
{
var claims = new List<Claim> {
new Claim(this._parameters.NameClaimType, User.Identity.Name),
new Claim("OrganId",userCurrentOrganNumber)
};
if (Request.IsJsonRequest())
{
return Json(this.CreateToken(claims));
}
else
{
this.HttpContext.JwtSignOut();
this.HttpContext.JwtSignIn(claims, false);
return Redirect(returnUrl);
}
}
else
{
message = "当前用户不是该机构成员";
}
}
else
{
message = "用户不存在";
}
}
else
{
message = "机构Id格式错误";
}
if (this.Request.IsJsonRequest())
{
return BadRequest(message);
}
else
{
return RedirectTo(returnUrl: returnUrl, rawMesage: message);
}
}
#region tools
@ -1002,4 +1040,4 @@ namespace Platform.Controllers
#endregion tools
}
}
}

@ -72,7 +72,7 @@
@{
var hasOrgan = false;
var organs = new List<Organ>();
var organIdValue = User.Claims.FirstOrDefault(o => o.Type == System.Security.Claims.ClaimTypes.UserData)?.Value;
var organIdValue = User.Claims.FirstOrDefault(o => o.Type == "OrganId")?.Value;
var organId = Guid.Empty;
if (User.Identity.IsAuthenticated && Guid.TryParse(organIdValue, out organId))
{
@ -95,7 +95,7 @@
<form method="get" action="@Url.Action("ChangeOrgan","Account",new{area=""})">
<span class="brand-text font-weight-light">
<input type="hidden" name="ReturnUrl" value="@ViewContext.HttpContext.Request.GetDisplayUrl()" />
@Html.DropDownList("UserCurrentOrganNumber", list, new { @class = "organ submit", style = "height:30px;width:160px;font-size:15px;background-color:#343a40;color: rgba(255,255,255,.8);font-size:14p" })
@Html.DropDownList("UserCurrentOrganNumber", list, new { @class = "organ submit", style = "height:30px;width:160px;font-size:15px;background-color:#343a40;color: rgba(255,255,255,.8);font-size:14px;" })
</span>
</form>
</div>

@ -23,11 +23,19 @@
</nav>
<aside class="main-sidebar sidebar-dark-primary elevation-4">
<a class="brand-link" style="padding:8px .5rem;" href="./" v-if="store.state.layout.organs.length===0">
<img class="logo" style="height:33px;" :src="store.state.layout.logo" />
<img class="logo" style="height:33px;" :src="logo" />
<span class="brand-text font-weight-light" style="display:inline-block;line-height:33px;">{{store.state.layout.name}}</span>
</a>
<div class="brand-link" href="./" v-else>
<img class="logo" style="height:33px;" :src="logo" />
<select id="UserCurrentOrganNumber" name="UserCurrentOrganNumber"
style="height:30px;width:160px; background-color: rgb(52, 58, 64); color: rgba(255, 255, 255, 0.8);font-size:14px;"
v-on:change="changeOrgan"
v-model="currentOrganId">
<option v-for="option in store.state.layout.organs" v-bind:value="option.id">
{{ option.name }}
</option>
</select>
</div>
<div class="sidebar">
<nav class="mt-2">
@ -69,18 +77,36 @@
data: function () {
return {
url: config.service('platform/api/v1/Site/Layout'),
viewPath:'/components/views/areas/'
viewPath: '/components/views/areas/'
}
},
computed: {
realName: function () {
return Enumerable.from(store.state.layout.user.claims).where(o => o.type === 'RealName').select(o => o.value).firstOrDefault();
},
logo: function () {
var result;
if (store.state.layout.organs.length > 0) {
var organ = Enumerable.from(store.state.layout.organs)
.orderByDescending(o => o.isDefault).orderBy(o => o.id)
.firstOrDefault();
if (organ) {
result = organ.image;
}
}
if (!result) {
result = store.state.layout.logo
}
return result;
},
currentOrganId: function () {
return store.state.layout.currentOrganId;
}
},
mounted: function () {
var vm = this;
axios.post(this.url).then(function (response) {
store.set('layout',response.data);
store.set('layout', response.data);
}).catch(function (error) {
console.log(error);
});
@ -90,8 +116,23 @@
store.commit('logout');
router.push('components/views/areas/default/login.html');
},
changeOrgan: function (event) {
var url = config.service('platform/Account/ChangeOrgan?UserCurrentOrganNumber=' + event.target.value);
axios.post(url).then(function (response) {
if (response.status === 200) {
store.commit('login', response.data);
setTimeout(function () {
router.push({ path: '/components/views/shared/redirect.html', query: { url: router.currentRoute.fullPath } });
}, 1000);
}
else if (response.status === 400) {
store.commit('logout');
router.push('components/views/areas/default/login.html');
}
});
},
getArea: function () {
var path = this.$route.path === '/' ? (this.viewPath+'default/index.html') : this.$route.path;
var path = this.$route.path === '/' ? (this.viewPath + 'default/index.html') : this.$route.path;
path = path.substr(this.viewPath.length);
return path === '/' ? 'default' : path.substr(0, path.indexOf('/'));
},
@ -106,7 +147,7 @@
return modules;
},
getMenus: function (area) {
area = area||this.getArea();
area = area || this.getArea();
var module = Enumerable.from(store.state.layout.modules).firstOrDefault(o => o.number === area);
var numbers = Enumerable.from(store.state.layout.user.claims).where(o => o.type === store.state.layout.user.roleClaimType).select(o => o.value).toArray();
var permissions = Enumerable.from(module.permissionCategories)
@ -123,7 +164,7 @@
cls += ' active';
}
else {
if (path.indexOf(this.viewPath+area) === 0) {
if (path.indexOf(this.viewPath + area) === 0) {
cls += ' active';
}
}
@ -131,4 +172,4 @@
}
}
}
</script>
</script>

@ -0,0 +1,19 @@
<template>
<layout><div>loading</div></layout>
</template>
<script>
export default {
mounted: function () {
var url = this.$route.query.url || '/';
this.$router.push(url);
},
methods: {
//beforeRouteEnter(to, from, next) {
// console.log(to);
// console.log(from);
// console.log(next);
// router.push('/');
//}
}
}
</script>
Loading…
Cancel
Save