完善个人中心保存显示名称、更改密码功能

This commit is contained in:
Argo-Lenovo 2016-11-16 20:06:28 +08:00
parent 80a0b4e3e2
commit 6a989044ca
11 changed files with 142 additions and 15 deletions

5
.gitignore vendored
View File

@ -152,4 +152,7 @@ Dotfuscated/
#AutoUpdate
*/UpdateServer/v*
*/UpdateServer/*.dll
*/UpdateServer/*.exe
*/UpdateServer/*.exe
#uploader
uploader/

View File

@ -136,6 +136,7 @@
<Content Include="Content\images\logo4.jpg" />
<Content Include="Content\images\logo5.jpg" />
<Content Include="Content\images\logo6.jpg" />
<Content Include="Content\images\uploader\Admin.jpg" />
<Content Include="Content\images\uploader\default.jpg" />
<Content Include="Content\images\uploader\readme.txt" />
<Content Include="Content\js\bootstrap-datetimepicker.js" />
@ -317,9 +318,7 @@
<DependentUpon>Web.config</DependentUpon>
</None>
</ItemGroup>
<ItemGroup>
<Folder Include="Content\images\uploader\" />
</ItemGroup>
<ItemGroup />
<ItemGroup>
<ProjectReference Include="..\Bootstrap.DataAccess\Bootstrap.DataAccess.csproj">
<Project>{af16ca71-b8c6-4f51-b38c-0c0300fdebd7}</Project>

View File

@ -325,13 +325,20 @@
};
User.saveUsersByRoleId = function (roleId, userIds, callback) {
processData.call(this, { Id: roleId, callback: callback, method: "PUT", data: { type: "role", userIds: userIds } });
}
};
User.getUsersByGroupeId = function (groupId, callback) {
processData.call(this, { Id: groupId, callback: callback, data: { type: "group" } });
};
User.saveUsersByGroupId = function (groupId, userIds, callback) {
processData.call(this, { Id: groupId, callback: callback, method: "PUT", data: { type: "group", userIds: userIds } });
};
User.saveUserDisplayName = function (user, callback) {
processData.call(this, { Id: '', callback: callback, method: "PUT", data: user });
};
User.changePassword = function (user) {
processData.call(this, { Id: '', method: "PUT", data: user });
}
// Groups
Group = {
url: '../api/Groups/',

View File

@ -1,5 +1,6 @@
using Bootstrap.Admin.Models;
using Bootstrap.DataAccess;
using Longbow.Security.Principal;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
@ -26,6 +27,24 @@ namespace Bootstrap.Admin.Controllers
/// <summary>
///
/// </summary>
/// <returns></returns>
[HttpPut]
public bool Put([FromBody]User value)
{
var ret = false;
var userName = User.Identity.Name;
if (value.UserName == userName && !LgbPrincipal.IsAdmin(userName))
{
if (value.UserStatus == 1)
ret = UserHelper.SaveUserInfoByName(value);
else if (value.UserStatus == 2)
ret = UserHelper.ChangePassword(value);
}
return ret;
}
/// <summary>
///
/// </summary>
/// <param name="roleId"></param>
/// <param name="value"></param>
/// <returns></returns>

View File

@ -17,4 +17,38 @@
var url = data.response;
if (!!url) $headerIcon.attr('src', url);
});
var bsa = new BootstrapAdmin({
url: '../api/Infos',
bootstrapTable: null,
dataEntity: new DataEntity({
map: {
Password: "currentPassword",
NewPassword: "newPassword",
DisplayName: "displayName",
UserName: "userName"
}
}),
click: {
assign: [{
id: 'btnSavePassword',
click: function (row, data) {
data.UserStatus = 2;
User.changePassword(data);
}
}, {
id: 'btnSaveDisplayName',
click: function (row, data) {
data.UserStatus = 1;
User.saveUserDisplayName(data, function (result) {
if (result) {
$('#userDisplayName').text(data.DisplayName);
}
});
}
}]
}
});
$('button[data-admin="True"]').attr('disabled', 'disabled');
});

View File

@ -50,7 +50,7 @@
},
success: function (src, data) {
if (src === 'save' && data.ID === $('#userId').val()) {
$('.username').text(data.DisplayName);
$('#userDisplayName').text(data.DisplayName);
}
}
});

View File

@ -4,6 +4,7 @@
Layout = "~/Views/Shared/_Admin.cshtml";
}
@section Javascript {
<script src="~/Content/js/longbow.dataentity.js"></script>
<script src="~/content/js/sweetalert.js"></script>
<script src="~/Content/js/fileinput.js"></script>
<script src="~/Content/js/zh.js"></script>
@ -23,20 +24,20 @@
<div class="panel panel-default">
<div class="panel-heading">基本资料</div>
<div class="panel-body">
<form class="form-inline" id="infoDataForm" name="infoDataForm" role="form">
<form id="infoDataForm" name="infoDataForm" class="form-inline" role="form">
<div class="row">
<div class="form-group col-xs-12 col-sm-6">
<label class="control-label" for="userName">登陆名称</label>
<input type="text" class="form-control" id="userName" name="userName" placeholder="不可为空" maxlength="50" />
<input type="text" class="form-control" id="userName" name="userName" value="@Model.UserName" readonly />
</div>
<div class="form-group col-xs-12 col-sm-6">
<label class="control-label" for="DisplayName">显示名称</label>
<input type="text" class="form-control" id="DisplayName" name="DisplayName" placeholder="不可为空" maxlength="50" />
<input type="text" class="form-control" id="displayName" name="displayName" value="@Model.DisplayName" placeholder="不可为空" maxlength="50" />
</div>
</div>
</form>
<div class="modal-footer">
<button class="btn btn-default" type="button">保存</button>
<button id="btnSaveDisplayName" class="btn btn-default" type="button" data-admin="@LgbPrincipal.IsAdmin(Model.UserName)">保存</button>
</div>
</div>
</div>
@ -60,7 +61,7 @@
</div>
</form>
<div class="modal-footer">
<button class="btn btn-default" type="button">保存</button>
<button id="btnSavePassword" class="btn btn-default" type="button" data-admin="@LgbPrincipal.IsAdmin(Model.UserName)">保存</button>
</div>
</div>
</div>

View File

@ -191,9 +191,9 @@
<li class="dropdown">
<a data-toggle="dropdown" class="dropdown-toggle" href="#">
<img id="headerIcon" alt="" src="@Url.Content(Model.Icon)">
<span class="username">@Model.DisplayName</span>
<span id="userDisplayName" class="username">@Model.DisplayName</span>
<b class="caret"></b>
<input id="userId" type="text" class="hide" value="@Model.UserID" />
<input id="userId" type="text" class="hidden" value="@Model.UserID" />
</a>
<ul class="dropdown-menu logout">
<div class="arrow-up"></div>

View File

@ -12,6 +12,7 @@
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="Longbow.Security.Principal" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />

View File

@ -60,8 +60,12 @@ namespace Bootstrap.DataAccess
/// </summary>
public string RejectedTime { get; set; }
/// <summary>
/// 获/设置 用户头像
/// 获/设置 用户头像
/// </summary>
public string Icon { get; set; }
/// <summary>
/// 获得/设置 新密码
/// </summary>
public string NewPassword { get; set; }
}
}

View File

@ -381,7 +381,66 @@ namespace Bootstrap.DataAccess
DBAccessManager.SqlDBAccess.ExecuteNonQuery(cmd);
ret = true;
}
CacheManager.Clear(key => key == RetrieveUsersByNameDataKey);
}
catch (Exception ex)
{
ExceptionManager.Publish(ex);
}
return ret;
}
/// <summary>
///
/// </summary>
/// <param name="user"></param>
/// <returns></returns>
public static bool SaveUserInfoByName(User user)
{
bool ret = false;
try
{
string sql = "Update Users set DisplayName = @DisplayName where UserName = @userName";
using (DbCommand cmd = DBAccessManager.SqlDBAccess.CreateCommand(CommandType.Text, sql))
{
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@DisplayName", user.DisplayName, ParameterDirection.Input));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@userName", user.UserName, ParameterDirection.Input));
DBAccessManager.SqlDBAccess.ExecuteNonQuery(cmd);
CacheCleanUtility.ClearCache(userIds: string.Empty);
ret = true;
}
}
catch (Exception ex)
{
ExceptionManager.Publish(ex);
}
return ret;
}
/// <summary>
///
/// </summary>
/// <param name="userName"></param>
/// <param name="user"></param>
/// <returns></returns>
public static bool ChangePassword(User user)
{
bool ret = false;
try
{
if (Authenticate(user.UserName, user.Password))
{
string sql = "Update Users set Password = @Password, PassSalt = @PassSalt where UserName = @userName";
user.PassSalt = LgbCryptography.GenerateSalt();
user.NewPassword = LgbCryptography.ComputeHash(user.NewPassword, user.PassSalt);
using (DbCommand cmd = DBAccessManager.SqlDBAccess.CreateCommand(CommandType.Text, sql))
{
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@Password", user.NewPassword, ParameterDirection.Input));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@PassSalt", user.PassSalt, ParameterDirection.Input));
cmd.Parameters.Add(DBAccessManager.SqlDBAccess.CreateParameter("@userName", user.UserName, ParameterDirection.Input));
DBAccessManager.SqlDBAccess.ExecuteNonQuery(cmd);
string key = string.Format("{0}-{1}", RetrieveUsersByNameDataKey, user.UserName);
CacheManager.Clear(k => k == key);
ret = true;
}
}
}
catch (Exception ex)
{