ABP模拟登录ImpersonatorUserId
展示前端
header.cshtml
@{ Layout = null; long? moni = ViewBag.moni; } @model HF.Template.UserManagerment.Users.Dtos.UserEditDto @*<link rel="stylesheet" href="/PortalSite/Content/portalsite/css/head.css">*@ @*<link rel="stylesheet" href="/PortalSite/Content/portalsite/css/head-footer.css">*@ <link href="https://tvupt.oss-cn-beijing.aliyuncs.com//PortalSite/Content/portalsite/newcss/css/header_footer.css" rel="stylesheet" /> <style> .phone { background: url(/PortalSite/Content/portalsite/newcss/img/phone.png) no-repeat; background-position: left center; font-size: 16px; color: #646368; padding-left: 14px; color: #1a6bc9 !important; } .phs{position:relative} .imt{ position:absolute; top:20px; left:-45px } .phs .imt { display: none } .imt { background: url(/PortalSite/Content/portalsite/img/dt.png) no-repeat; background-size: 100% 100%; width: 170px; height: 200px; text-align: center; z-index: 100; } .imt > img { width: 100px; height: 100px; margin-top: 26px; } .phs:hover .imt { display: block; } </style> <div class="header"> @if (Model == null) { <div class="midHearder clearfix"> <span class="leftHeader"> @(DateTime.Now.ToString("yyyy年MM月dd日")) <span class="midList">您是第<span class="redList">@ViewBag.re</span>位访客! </span>@*在线用户<span class="redList">@ViewBag.li</span>人*@ </span> <div class="rightHeader"> <ul> <li><a onclick="parent.location.href='/Account/SignIn'" href="javascript:;">登录</a></li> <li> <a onclick="parent.location.href='/Account/RegisterUser'" href="javascript:;">学员注册</a> | <a onclick="parent.location.href='/Account/RegisterUser?type=2'" href="javascript:;">集体注册</a> </li> <li> <a onclick="parent.location.href='/Account/PassWordBack'" href="javascript:;">找回密码</a></li> <li class="phs"> <a class="phone" href="javascript:;">手机版</a> <div class="imt"> <img src="~/PortalSite/Content/portalsite/img/mobilecode.png" /> <div style="margin:0px; padding:0px;line-height:20px">扫一扫</div> <span style="margin:0px; padding:0px;line-height:20px">登录手机版</span> </div> </li> @*<li><a href="loginRegister/signin.html">[退出]</a></li>*@ </ul> </div> </div> } else if (Model.UserType == 1) { <div class="midHearder clearfix"> <span class="leftHeader"> @(DateTime.Now.ToString("yyyy年MM月dd日")) <span class="midList"> 您是第<span class="redList">@ViewBag.re</span>位访客! </span> @*在线用户<span class="redList">@ViewBag.li</span>人*@ </span> <div class="rightHeader"> <ul> <li>@ViewBag.person.Surname</li> <li> <a onclick="parent.location.href='/Train/Training'" href="javascript:;">我要报名</a> </li> <li><a onclick="parent.location.href='/PersonCenter/MyPersonalCenter'" href="javascript:;">进入学习中心</a></li> @if (moni.HasValue && moni.Value > 0) { <li><a onclick="parent.location.href='/Account/SkipImpersonatorUser'" href="javascript:;">返回后台</a></li> } <li><a onclick="parent.location.href='/Account/Logout'" href="javascript:;">【退出】</a></li> <li class="phs"> <a class="phone" href="javascript:;">手机版</a> <div class="imt"> <img src="~/PortalSite/Content/portalsite/img/mobilecode.png" /> <div style="margin:0px; padding:0px;line-height:20px">扫一扫</div> <span style="margin:0px; padding:0px;line-height:20px">登录手机版</span> </div> </li> </ul> </div> </div> } else if (Model.UserType == 2) { <div class="midHearder clearfix"> <span class="leftHeader"> @(DateTime.Now.ToString("yyyy年MM月dd日")) <span class="midList"> 您是第<span class="redList">@ViewBag.re</span>位访客! </span>@*在线用户<span class="redList">@ViewBag.li</span>人*@ </span> <div class="rightHeader"> <ul> <li>@ViewBag.company.CompanyName</li> <li> <a onclick="parent.location.href='/CompanyCenter/Apply'" href="javascript:;">我要报名</a> </li> <li><a onclick="parent.location.href='/CompanyCenter/TeamObligation'" href="javascript:;">进入管理中心</a></li> @if (moni.HasValue && moni.Value > 0) { <li><a onclick="parent.location.href='/Account/SkipImpersonatorUser'" href="javascript:;">返回后台</a></li> } <li><a onclick="parent.location.href='/Account/Logout'" href="javascript:;">【退出】</a></li> <li class="phs"> <a class="phone" href="javascript:;">手机版</a> <div class="imt"> <img src="~/PortalSite/Content/portalsite/img/mobilecode.png" /> <div style="margin:0px; padding:0px;line-height:20px">扫一扫</div> <span style="margin:0px; padding:0px;line-height:20px">登录手机版</span> </div> </li> </ul> </div> </div> } else { <div class="midHearder clearfix"> <span class="leftHeader"> @(DateTime.Now.ToString("yyyy年MM月dd日")) <span class="midList"> 您是第<span class="redList">@ViewBag.re</span>位访客! </span>@*在线用户<span class="redList">@ViewBag.li</span>人*@ </span> <div class="rightHeader"> <ul> <li><a onclick="parent.location.href='/Account/SignIn'" href="javascript:;">登录</a></li> <li> <a onclick="parent.location.href='/Account/RegisterUser'" href="javascript:;">学员注册</a> | <a onclick="parent.location.href='/Account/RegisterUser?type=2'" href="javascript:;">集体注册</a> </li> <li> <a onclick="parent.location.href='/Account/PassWordBack'" href="javascript:;">找回密码</a></li> <li><a onclick="parent.location.href='/Account/SkipImpersonatorUser'" href="javascript:;">返回后台</a></li> <li class="phs"> <a class="phone" href="javascript:;">手机版</a> <div class="imt"> <img src="~/PortalSite/Content/portalsite/img/mobilecode.png" /> <div style="margin:0px; padding:0px;line-height:20px">扫一扫</div> <span style="margin:0px; padding:0px;line-height:20px">登录手机版</span> </div> </li> </ul> </div> </div> } </div> <div class="logoLine"> <div class="midHearder clearfix"> <a href="#" class="leftLogo"> <img src="https://tvupt.oss-cn-beijing.aliyuncs.com//PortalSite/Content/portalsite/newcss/img/logo.jpg" alt=""> </a> <div class="rightTel"> <p class="logo">咨询电话 <span class="listLogo">0315-2020187或2059305</span></p> <p class="tel">3047785784@qq.com</p> </div> </div> </div>
展示后台
/// <summary> /// 布局头部 /// </summary> /// <returns></returns> public ActionResult header() { var c = _userAppService.GetHomeCount(); ViewBag.re = c.Item1; ViewBag.li = c.Item2; PersonEditDto personEditDto = null; CompanyEditDto companyEditDto = null; var UserId = AbpSession.UserId; ViewBag.moni = AbpSession.ImpersonatorUserId; UserEditDto usero = null; if (UserId.HasValue && UserId > 0) { usero = _userAppService.GetUserById(AbpSession.UserId.Value); if (usero.UserType == 1) { var user = _userAppService.GetOrdinaryUserInfo((int)AbpSession.UserId.Value); personEditDto = user; } else if (usero.UserType == 2) { var company = _userAppService.GetCompanyUserInfo((int)AbpSession.UserId.Value); companyEditDto = company; } } ViewBag.person = personEditDto; ViewBag.company = companyEditDto; return View(usero); }
登录前端
ordinaryUserList.cshtml
@using HF.Template.Localization <link href="~/libs/bootstrap/css/multiple-select.css" rel="stylesheet" /> <script src="~/libs/bootstrap/js/multiple-select.js"></script> <style> :before { margin-right: 5px; } body input[type="checkbox"] { margin: 0; } </style> <div ng-controller="app.views.users.ordinaryuserlist as s"> <div class="panel"> <div class="content panel-body"> <div class="row "> <div class="col-xs-12 col-md-6"> <div class="form-group"> <label class="control-label">姓名</label> <input type="text" class="form-control" ng-model="s.requestParams.surname" /> </div> </div> <div class=" col-xs-12 col-md-6"> <div class="form-group"> <label class="control-label">手机号</label> <input type="text" class="form-control" onkeyup="value=value.replace(/[^0-9]/g,'')" ng-model="s.requestParams.phoneNo" /> </div> </div> </div> <div class="row " @*ng-if="s.advancedFiltersAreShown"*@> <div class="col-xs-12 col-md-6"> <div class="form-group"> <label class="control-label">身份证</label> <input type="text" class="form-control" ng-model="s.requestParams.identityCard" /> </div> </div> <div class="col-xs-12 col-md-6" ng-if="s.currentTanentId==null"> <div class="form-group"> <label class="control-label">租户</label> <select multiple="multiple" ng-model="s.requestParams.tenantIds" select-mutiple="{value:'id',text:'name',list: s.tenants,selectedValue:[s.currentTanentId]}"></select> </div> </div> </div> <div class="row " @*ng-if="s.advancedFiltersAreShown"*@> <div class="col-xs-12 col-md-6"> <div class="form-group"> <label class="control-label">单位</label> <input type="text" class="form-control" ng-model="s.requestParams.company" /> </div> </div> <div class="col-xs-12 col-md-6"> <div class="form-group"> <button class="btn blue" type="button" ng-click="s.getUsers()" style="margin-top:21px"><i class="fa fa-refresh"></i>搜索</button> </div> </div> </div> @*<div class="row" enter-key="s.getUsers()"> <div class="col-lg-12 col-md-12"> <div class="input-group input-group-sm"> <input ng-model="s.filterText" auto-focus class="form-control" placeholder="@L("SearchWithThreeDot")" type="text"> <span class="input-group-btn"> <button class="btn btn-default" ng-click="s.getUsers()"><i class="fa fa-refresh"></i> @L("Refresh")</button> </span> </div> </div> </div>*@ @*<div class="row" ng-if="s.advancedFiltersAreShown"> <div class="col-lg-6 col-md-12"> <div class="input-group"> <label class="input-group-addon">占位</label> <input type="text" class="form-control"> </div> </div> <div class="col-lg-6 col-md-12"> <div class="input-group"> <label class="input-group-addon">占位</label> <input type="text" class="form-control"> </div> </div> </div> <div class="row"> <div class="col-sm-6"> <span class="clickable-item text-muted" ng-if="!s.advancedFiltersAreShown" ng-click="s.advancedFiltersAreShown=!s.advancedFiltersAreShown"><i class="fa fa-angle-down"></i> @L("ShowAdvancedFilters")</span> <span class="clickable-item text-muted" ng-if="s.advancedFiltersAreShown" ng-click="s.advancedFiltersAreShown=!s.advancedFiltersAreShown"><i class="fa fa-angle-up"></i> @L("HideAdvancedFilters")</span> </div> <div class="col-sm-6"> </div> </div>*@ <div class="row"> <div class="col-sm-6 btn-group btn-group-sm col-xs-12 col-md-6"> <button class="btn btn-default" ng-if="s.permissions.create" ng-click="s.createUser()"><i class="fa fa-plus"></i> @L("CreateNewUser")</button> <button style="margin-left:5px;margin-bottom: 5px;" class="btn btn-default" ng-if="s.permissions.edit" ng-click="s.batchActive()"><i class="fa fa-ravelry"></i>批量审核用户</button> <button style="margin-left:5px;margin-bottom: 5px;" class="btn btn-default" ng-if="s.permissions.delete" ng-click="s.deleteAll()"><span class="fa fa-trash-o">@L("BatchDelete")</span></button> <button style="margin-left:5px; margin-bottom: 5px;" class="btn btn-default" ng-click="s.downloadTemp()"><i class="fa fa-file-excel-o"></i>@L("DownLoadDataTemp")</button> <button style="margin-left:5px; margin-bottom: 5px;" class="btn btn-default btn-sm" ng-click="s.exportToExcel()"><span class="glyphicon glyphicon-export">导出表格</span></button> </div> <div class="col-sm-6 text-right col-xs-12 col-md-6"> <input id="excelFile" name="excelFile" class="file-loading " type="file" accept=".xls,.xlsx"> </div> </div> <div busy-if="s.loading"> <div ui-grid="s.userGridOptions" ui-grid-selection ui-grid-pagination ui-grid-resize-columns dir=@(CultureHelper.IsRtl ? "rtl" : "")></div> </div> </div> </div> </div>
ordinaryUserList.js
(function () { 'use strict'; yoyocmsModule.controller('app.views.users.ordinaryuserlist', [ '$scope', '$state', '$http', 'FileSaver', 'Blob', '$uibModal', '$stateParams', 'uiGridConstants', 'abp.services.app.user', 'abp.services.app.canton', function ($scope, $state, $http, FileSaver, Blob, $uibModal, $stateParams, uiGridConstants, userService, cantonService) { var s = this; $state.current.title = $state.current.displayName;//页面标签 s.loading = false; //s.advancedFiltersAreShown = false;//是否显示高级过滤 //s.filterText = $stateParams.filterText || '';//过滤文本 //s.currentUserId = abp.session.userId;//当前用户 s.currentTanentId = abp.session.tenantId; //权限定义 s.permissions = { detail: abp.auth.hasPermission('Pages.Users.Ordinary.Detail'),//详情 create: abp.auth.hasPermission('Pages.Users.Ordinary.Create'),//添加 edit: abp.auth.hasPermission('Pages.Users.Ordinary.Edit'),//编辑 delete: abp.auth.hasPermission('Pages.Users.Ordinary.Delete'),//删除 import: abp.auth.hasPermission('Pages.Users.Ordinary.Import'),//导入 impersonation: abp.auth.hasPermission('Pages.Users.Ordinary.Impersonation')//模拟 }; //请求参数 s.requestParams = { userName:"", tenantIds: [s.currentTanentId], phoneNo: "", surName: "", identityCard: "", filterText: "", company:"", isActive: null, skipCount: 0, maxResultCount: app.consts.grid.defaultPageSize, sorting: null }; //普通用户列表 s.userGridOptions = { enableHorizontalScrollbar: uiGridConstants.scrollbars.WHEN_NEEDED, enableVerticalScrollbar: uiGridConstants.scrollbars.WHEN_NEEDED, paginationPageSizes: app.consts.grid.defaultPageSizes, paginationPageSize: app.consts.grid.defaultPageSize, useExternalPagination: true, useExternalSorting: true, enableHiding: false, enableSorting: true, enableFullRowSelection: false, enableRowHeaderSelection: true, selectionRowHeaderWidth: 35, enableSelectAll: true, appScopeProvider: s, rowTemplate: '<div ng-repeat="(colRenderIndex, col) in colContainer.renderedColumns track by col.colDef.name" class="ui-grid-cell" ng-class="{ \'ui-grid-row-header-cell\': col.isRowHeader, \'text-muted\': !row.entity.isActive }" ui-grid-cell></div>', columnDefs: [ { name: app.localize('UserName'), field: 'userName', sorting: 'UserName', cellTemplate: '<div class=\"ui-grid-cell-contents\">' + ' <img ng-if="row.entity.profilePictureId" ng-src="' + abp.appPath + 'Profile/GetProfilePictureById?id={{row.entity.profilePictureId}}" width="22" height="22" class="img-rounded img-profile-picture-in-grid" />' + ' <img ng-if="!row.entity.profilePictureId" src="' + abp.appPath + 'Common/Images/default-profile-picture.png" width="22" height="22" class="img-rounded" />' + ' {{COL_FIELD CUSTOM_FILTERS}} ' + '</div>', enableHiding: false, enableSorting: true, minWidth: 140 }, { name: "姓名", field: 'surname', sorting: 'Surname', enableHiding: false, enableSorting: true, minWidth: 160 }, { name: "身份证号", field: 'identityCard', sorting: 'IdentityCard', enableHiding: false, enableSorting: true, minWidth: 160 }, { name: "所在区", field: 'area', sorting: 'Area', enableHiding: false, enableSorting: true, minWidth: 160 }, { name: "注册时间", field: 'creationTime', sorting: 'CreationTime', cellFilter: 'momentFormat: \'YYYY-MM-DD HH:mm:ss\'', enableHiding: false, enableSorting: true, minWidth: 160 }, { name: '审核状态', field: 'isActive', sorting: 'IsActive', enableHiding: false, enableSorting: true, minWidth: 100, cellFilter: 'stringformat' }, { name: app.localize('Actions'), enableHiding: false, enableSorting: false, enableColumnMenu: false,// 是否显示列头部菜单按钮 width: 120, cellTemplate: '<div class=\"ui-grid-cell-contents\">' + ' <div class="btn-group dropdown" uib-dropdown="" dropdown-append-to-body>' + ' <button class="btn btn-xs btn-primary blue" uib-dropdown-toggle="" aria-haspopup="true" aria-expanded="false"><i class="fa fa-cog"></i> ' + app.localize('Actions') + ' <span class="caret"></span></button>' + ' <ul uib-dropdown-menu>' + ' <li><a ng-if="grid.appScope.permissions.impersonation && row.entity.id != grid.appScope.currentUserId" ng-click="grid.appScope.impersonate(row.entity)">' + app.localize('LoginAsThisUser') + '</a></li>' + ' <li><a ng-if="grid.appScope.permissions.detail" ng-click="grid.appScope.userDetail(row.entity)">' + app.localize('Detail') + '</a></li>' +//TODO:详情点击事件未添加 ' <li><a ng-if="grid.appScope.permissions.delete" ng-click="grid.appScope.deleteUser(row.entity)">' + app.localize('Delete') + '</a></li>' +//TODO:详情点击事件未添加 ' <li><a ng-if="grid.appScope.permissions.edit" ng-click="grid.appScope.editUser(row.entity)">' + app.localize('Edit') + '</a></li>' + ' <li><a ng-if="grid.appScope.permissions.edit" ng-click="grid.appScope.changePassword(row.entity)">' + app.localize('PasswordReset') + '</a></li>' + ' </ul>' + ' </div>' + '</div>' }, ], onRegisterApi: function (gridApi) { $scope.gridApi = gridApi; $scope.gridApi.core.on.sortChanged($scope, function (grid, sortColumns) { if (!sortColumns.length || !sortColumns[0].field) { s.requestParams.sorting = null; } else { s.requestParams.sorting = sortColumns[0].colDef.sorting + ' ' + sortColumns[0].sort.direction; } s.getUsers(); }); gridApi.pagination.on.paginationChanged($scope, function (pageNumber, pageSize) { s.requestParams.skipCount = (pageNumber - 1) * pageSize; s.requestParams.maxResultCount = pageSize; s.getUsers(); }); gridApi.selection.on.rowSelectionChanged($scope, function (row, event) { var selectrows = gridApi.selection.getSelectedGridRows() //行选中事件 }); }, data: [] }; //获取普通用户列表 s.getUsers = function () { s.loading = true; if (s.requestParams.tenantIds.indexOf("null") > -1) { s.requestParams.tenantIds.splice(s.requestParams.tenantIds.indexOf("null"), 1, null) } if (s.requestParams.tenantIds.length == 0) s.requestParams.tenantIds.push(null) userService.getPagedOrdinaryUsersAsync($.extend({ filterText: s.filterText}, s.requestParams)) .then(function (result) { s.userGridOptions.totalItems = result.data.totalCount; s.userGridOptions.data = result.data.items; }).finally(function () { s.loading = false; }); }; //编辑用户 s.editUser = function (user) { openCreateOrEditUserModal(user.id); }; //添加用户 s.createUser = function () { openCreateOrEditUserModal(null); }; //TODO:注释 暂时不实现 编辑权限 //s.editPermissions = function (user) { // $uibModal.open({ // templateUrl: '~/App/common/views/users/permissionsModal.cshtml', // controller: 'common.views.users.permissionsModal as s', // backdrop: 'static', // resolve: { // user: function () { // return user; // } // } // }); //}; //模拟登陆 s.impersonate = function (user) { abp.ajax({ url: abp.appPath + 'Account/OrdinaryImpersonate', data: JSON.stringify({ tenantId: abp.session.tenantId, userId: user.id }) }); }; //TODO:暂未显示 删除单个普通用户 s.deleteUser = function (user) { if (user.userName == app.consts.userManagement.defaultAdminUserName) { abp.message.warn(app.localize("UserCannotBeDeleted", app.consts.userManagement.defaultAdminUserName)); return; } abp.message.confirm( app.localize('UserDeleteWarningMessage', user.userName), function (isConfirmed) { if (isConfirmed) { userService.deleteOrdinaryUserAsync({ id: user.id }).then(function () { s.getUsers(); abp.notify.success(app.localize('SuccessfullyDeleted')); }); } } ); }; //获取所有租户 s.getAlltenants = function () { cantonService.getTenantsAsync().then(function (result) { s.tenants = result.data; }) } s.te = [null]; s.exportToExcel = function () { if (s.requestParams.tenantIds[0] == "null") { s.requestParams.tenantIds = s.te; } return $http.post('/api/user/ExportClassUserAsync', s.requestParams, { responseType: "arraybuffer" }).then(function (response) { if (response.status == "200") { var data = new Blob([response.data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }); var filename = "userList.xlsx"; FileSaver.saveAs(data, filename); } else { abp.message.info(response.statusText); } }); } //批量删除普通用户 s.deleteAll = function () { s.select = []; var currentSelection = $scope.gridApi.selection.getSelectedRows(); if (currentSelection.length == 0) { abp.message.warn('请选择要删除的用户!', '提示'); } else { for (var i = 0; i < currentSelection.length; i++) { s.select.push(currentSelection[i].id); } abp.message.confirm( app.localize('UserDeleteWarningMessage', currentSelection[0].surname + " 等"), function (isConfirmed) { if (isConfirmed) { userService.batchDeleteOrdinaryUserAsync({ userIds: s.select }).then(function () { s.getUsers(); abp.notify.success(app.localize('SuccessfullyDeleted')); }); } } ); } } //用户详情 s.userDetail = function (user) { var modalInstance = $uibModal.open({ templateUrl: '~/App/Admin/views/users/ordinaryUserDetail.cshtml', controller: 'app.views.users.ordinaryUserDetail as vm', backdrop: 'static', size:'lg', resolve: { userId: function () { return user.id; } } }); modalInstance.result.then(function (result) { s.getUsers(); }); } s.batchActive = function () { s.select = []; var currentSelection = $scope.gridApi.selection.getSelectedRows(); if (currentSelection.length == 0) { abp.message.warn('请选择要审核的用户!', '提示'); } else { for (var i = 0; i < currentSelection.length; i++) { s.select.push(currentSelection[i].id); } abp.message.confirm( "确定要通过审核吗", function (isConfirmed) { if (isConfirmed) { userService.batchActive({ userIds: s.select }).then(function () { s.getUsers(); abp.notify.success("审核成功"); }); } } ); } } //TODO:注释 暂时不实现 解锁用户 //s.unlockUser = function (user) { // userService.unlockUser({ // id: user.id // }) // .then(function () { // abp.notify.success(app.localize('UnlockedTheUser', user.userName)); // }); //}; //TODO:注释 暂时不实现 导出excel //s.exportToExcel = function () { // userService.getUsersToExcel({}) // .then(function (result) { // app.downloadTempFile(result.data); // }); //}; //打开创建或者编辑用户窗体 function openCreateOrEditUserModal(userId) { var modalInstance = $uibModal.open({ templateUrl: '~/App/Admin/views/users/createOrEditOrdinaryModal.cshtml', controller: 'app.views.users.createOrEditOrdinaryModal as vm', backdrop: 'static', //size:'lg', resolve: { userId: function () { return userId; } } }); modalInstance.result.then(function (result) { s.getUsers(); }); } //重置密码 s.changePassword = function (user) { abp.message.confirm( app.localize('PasswordResetWarningMessage', user.userName), function (isConfirmed) { if (isConfirmed) { userService.resetPassword({ id: user.id }).then(function (result) { abp.message.success("密码已经被重置为" + result.data); }); } } ); }; //下载模板 s.downloadTemp = function () { return $http.post('/api/files/downloadSingle', { filePath: "~/App_Data/temp/UserList.xlsx" }, { responseType: "arraybuffer" }).then(function (response) { if (response.status == "200") { var data = new Blob([response.data], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }); var filename = "UserList.xlsx"; FileSaver.saveAs(data, filename); } else { abp.message.info(response.statusText); } }); }; s.getAlltenants(); s.getUsers(); if (s.permissions.import) {//判断权限 //初始化上传控件的样式 $("#excelFile").fileinput({ language: 'zh', //设置语言 uploadUrl: '/api/services/app/user/UploadOrdinaryUserToExcel', //上传的地址 //uploadUrl: '/api/services/app/question/UploadQuestionToExcel', //上传的地址 uploadAsync: true, //默认异步上传 showUpload: true, //是否显示上传按钮 showCaption: true,//是否显示标题 allowedFileExtensions: ["xls", "xlsx"],//接收的文件后缀 mainClass:"input-group-sm",//控件组样式 browseClass: "btn btn-primary", //按钮样式 //dropZoneEnabled: false,//是否显示拖拽区域 //minImageWidth: 50, //图片的最小宽度 //minImageHeight: 50,//图片的最小高度 //maxImageWidth: 1000,//图片的最大宽度 //maxImageHeight: 1000,//图片的最大高度 //maxFileSize: 0,//单位为kb,如果为0表示不限制文件大小 //minFileCount: 0, //msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!", enctype: 'multipart/form-data', validateInitialCount: true, maxFileCount: 1,//最大上传文件数限制 showPreview: false, //是否显示预览 previewFileIcon: '<i class="glyphicon glyphicon-file"></i>', previewFileIconSettings: { 'docx': '<i ass="fa fa-file-word-o text-primary"></i>', 'xlsx': '<i class="fa fa-file-excel-o text-success"></i>', 'xls': '<i class="fa fa-file-excel-o text-success"></i>', 'pptx': '<i class="fa fa-file-powerpoint-o text-danger"></i>', 'jpg': '<i class="fa fa-file-photo-o text-warning"></i>', 'pdf': '<i class="fa fa-file-archive-o text-muted"></i>', 'zip': '<i class="fa fa-file-archive-o text-muted"></i>', }, uploadExtraData: function (previewId, index) { //传参 //此处自定义传参 var data = { //"courseId": 1, //"categoryId": 1 }; return data; } }); //导入文件上传完成之后的事件 异步上传成功结果处理 $("#excelFile").on("fileuploaded", function (event, data, previewId, index) { s.getUsers(); }); //同步上传成功结果处理 $("#excelFile").on("filebatchuploadsuccess", function (event, data, previewId, index) { s.getUsers(); }); } else { $("#excelFile").hide(); } }]); })();
登录后端
#region Impersonation [AbpMvcAuthorize(PermissionNames.Pages_Users_Company_Impersonation)] public Task<JsonResult> CompanyImpersonate(ImpersonateModel model) { return Impersonate(model); } [AbpMvcAuthorize(PermissionNames.Pages_Users_Ordinary_Impersonation)] public Task<JsonResult> OrdinaryImpersonate(ImpersonateModel model) { return Impersonate(model); } public virtual async Task<JsonResult> Impersonate(ImpersonateModel model) { CheckModelState(); if (AbpSession.ImpersonatorUserId.HasValue) { throw new CustomeFriendlyException(L("CascadeImpersonationErrorMessage")); } if (AbpSession.TenantId.HasValue) { if (!model.TenantId.HasValue) { throw new CustomeFriendlyException(L("FromTenantToHostImpersonationErrorMessage")); } if (model.TenantId.Value != AbpSession.TenantId.Value) { throw new CustomeFriendlyException(L("DifferentTenantImpersonationErrorMessage")); } } var result = await SaveImpersonationTokenAndGetTargetUrl(model.TenantId, model.UserId, false); // AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); return result; } [UnitOfWork] public virtual async Task<ActionResult> ImpersonateSignIn(string tokenId) { var cacheItem = await _cacheManager.GetImpersonationCache().GetOrDefaultAsync(tokenId); if (cacheItem == null) { throw new CustomeFriendlyException(L("ImpersonationTokenErrorMessage")); } //Switch to requested tenant 去掉过滤 宿主需要模拟登陆其他租户的用户 // using (_unitOfWorkManager.Current.SetFilterParameter(AbpDataFilters.MayHaveTenant, AbpDataFilters.Parameters.TenantId, cacheItem.TargetTenantId)) using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant)) { //Get the user from tenant var user = await _userManager.FindByIdAsync(cacheItem.TargetUserId); //Create identity //var identity = await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); // var identity = await _userManager.CreateIdentityAsync(user,"Bearer"); var identity = await _userManager.CreateIdentityAsync(user, "Bearer"); if (!cacheItem.IsBackToImpersonator) { //Add claims for audit logging if (cacheItem.ImpersonatorTenantId.HasValue) { identity.AddClaim(new Claim(AbpClaimTypes.ImpersonatorTenantId, cacheItem.ImpersonatorTenantId.Value.ToString(CultureInfo.InvariantCulture))); } identity.AddClaim(new Claim(AbpClaimTypes.ImpersonatorUserId, cacheItem.ImpersonatorUserId.ToString(CultureInfo.InvariantCulture))); } await SignInAsync(user, identity); //Sign in with the target user user.Online = 1; //AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); //AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = false }, identity); //var accessToken = CreateAccessToken(await CreateJwtClaims(identity, user)); // System.Web.HttpContext.Current.Response.Cookies.Add(new System.Web.HttpCookie("webToken") { Path = "/", Name = "webToken", Value = accessToken }); //Remove the cache item to prevent re-use await _cacheManager.GetImpersonationCache().RemoveAsync(tokenId); if (user.UserType == 0) { return Redirect("/Admin");// 跳转后台 } else { if (System.Configuration.ConfigurationManager.AppSettings["debug"] == "0") { var tenantId = user.TenantId; var caton = _cantonAppService.GetBindCantonByTenantId(tenantId); return Redirect("http://" + caton.SubURL + "." + System.Configuration.ConfigurationManager.AppSettings["ym"]);//修改 李飞行 跳转首页 }else { return Redirect("/");// 跳转首页 } } //return RedirectToAction(); } } //public virtual JsonResult IsImpersonatedLogin() //{ // return Json(new AjaxResponse { Result = AbpSession.ImpersonatorUserId.HasValue }); //} //public virtual async Task<JsonResult> BackToImpersonator() //{ // if (!AbpSession.ImpersonatorUserId.HasValue) // { // throw new CustomeFriendlyException(L("NotImpersonatedLoginErrorMessage")); // } // var result = await SaveImpersonationTokenAndGetTargetUrl(AbpSession.ImpersonatorTenantId, AbpSession.ImpersonatorUserId.Value, true); // AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); // return result; //} private async Task<JsonResult> SaveImpersonationTokenAndGetTargetUrl(int? tenantId, long userId, bool isBackToImpersonator) { //Create a cache item var cacheItem = new ImpersonationCacheItem( tenantId, userId, isBackToImpersonator ); if (!isBackToImpersonator) { cacheItem.ImpersonatorTenantId = AbpSession.TenantId; cacheItem.ImpersonatorUserId = AbpSession.GetUserId(); } //Create a random token and save to the cache var tokenId = Guid.NewGuid().ToString(); await _cacheManager .GetImpersonationCache() .SetAsync(tokenId, cacheItem, TimeSpan.FromMinutes(1)); //Find tenancy name string tenancyName = null; if (tenantId.HasValue) { tenancyName = (await _tenantManager.GetByIdAsync(tenantId.Value)).TenancyName; } //Create target URL var targetUrl = _webUrlService.GetSiteRootAddress(tenancyName) + "Account/ImpersonateSignIn?tokenId=" + tokenId; return Json(new AjaxResponse { TargetUrl = targetUrl }); } #endregion public async Task<ActionResult> SkipImpersonatorUser() { using (_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.MayHaveTenant)) { if (AbpSession.ImpersonatorUserId.HasValue && AbpSession.ImpersonatorUserId.Value > 0) { var user = await _userManager.FindByIdAsync(AbpSession.ImpersonatorUserId.Value); await SignInAsync(user); //Create identity // var identity = await _userManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie); // AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); user.Online = 1; //AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = false }, identity); } return Redirect("/Admin"); } }
作者:银龙
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!