using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Security;
using MongoDB.Bson;
using MongoDB.Driver;
using Newtonsoft.Json;
using ShadowEditor.Model.System;
namespace ShadowEditor.Server.Helpers
{
///
/// 用户帮助器
///
/// UserModel带有密码信息,注意不要返回给前端。
public class UserHelper
{
///
/// 获取当前用户
///
///
public static UserModel GetCurrentUser()
{
var cookies = HttpContext.Current.Request.Cookies;
// 获取cookie
var cookie = cookies.Get(FormsAuthentication.FormsCookieName);
if (cookie == null)
{
return null;
}
// 解析ticket数据
var ticket = FormsAuthentication.Decrypt(cookie.Value);
LoginTicketDataModel userData = null;
try
{
userData = JsonConvert.DeserializeObject(ticket.UserData);
}
catch (Exception ex)
{
var log = LogHelper.GetLogger(typeof(UserHelper));
log.Error("User ticket deserialized failed.", ex);
return null;
}
return GetUser(userData.UserID);
}
///
/// 获取用户所有信息
///
///
///
public static UserModel GetUser(string userID)
{
ObjectId objectId;
if (!ObjectId.TryParse(userID, out objectId))
{
var log = LogHelper.GetLogger(typeof(UserHelper));
log.Error("UserID parse failed.");
return null;
}
var mongo = new MongoHelper();
var filter = Builders.Filter.Eq("ID", objectId);
var doc = mongo.FindOne(Constant.UserCollectionName, filter);
if (doc == null)
{
return null;
}
// 获取角色和权限信息
var roleID = "";
var roleName = "";
var authorities = new List();
if (doc.Contains("RoleID") && ObjectId.TryParse(doc["RoleID"].ToString(), out objectId))
{
filter = Builders.Filter.Eq("ID", objectId);
var role = mongo.FindOne(Constant.RoleCollectionName, filter);
if (role != null)
{
roleID = role["ID"].ToString();
roleName = role["Name"].ToString();
// 管理员组默认具有所有权限
if (roleName == "Administrator")
{
authorities = OperatingAuthorityHelper.GetAll().Select(n => n.ID).ToList();
}
else
{
filter = Builders.Filter.Eq("RoleID", roleID);
authorities = mongo.FindMany(Constant.OperatingAuthorityCollectionName, filter).ToList()
.Select(n => n["AuthorityID"].ToString()).ToList();
}
}
}
return new UserModel
{
ID = doc["ID"].ToString(),
Username = doc["Username"].ToString(),
Name = doc["Name"].ToString(),
Password = doc["Password"].ToString(),
RoleID = roleID,
RoleName = roleName,
OperatingAuthorities = authorities,
Gender = doc["Gender"].ToInt32(),
Phone = doc["Phone"].ToString(),
Email = doc["Email"].ToString(),
QQ = doc["QQ"].ToString(),
CreateTime = doc["CreateTime"].ToLocalTime(),
UpdateTime = doc["UpdateTime"].ToLocalTime(),
Salt = doc["Salt"].ToString(),
Status = doc["Status"].ToInt32(),
};
}
}
}