[Common]
登录相关方法的参数改为使用token,而不是Credential。 新增ReadOnlyRole角色,用于账号被顶出后自动将界面设置为只读模式。
This commit is contained in:
parent
4898aa6911
commit
6957751858
|
@ -230,20 +230,20 @@ namespace Aitex.Core.Account
|
|||
AccountExManager.Instance.CancelLoginRequest(userName);
|
||||
}
|
||||
|
||||
public void ConfirmLoginRequest(Credential requestingCred)
|
||||
public void ConfirmLoginRequest(string userName)
|
||||
{
|
||||
AccountExManager.Instance.ConfirmedLoginRequest(requestingCred);
|
||||
AccountExManager.Instance.ConfirmedLoginRequest(userName);
|
||||
}
|
||||
|
||||
public void RejectLoginRequest(Credential requestingCred)
|
||||
public void RejectLoginRequest(string userName)
|
||||
{
|
||||
AccountExManager.Instance.RejectLoginRequest(requestingCred);
|
||||
AccountExManager.Instance.RejectLoginRequest(userName);
|
||||
}
|
||||
|
||||
|
||||
public void LogoutEx(Credential cred)
|
||||
public void LogoutEx(Guid myToken)
|
||||
{
|
||||
AccountExManager.Instance.Logout(cred);
|
||||
AccountExManager.Instance.Logout(myToken);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
@ -251,9 +251,9 @@ namespace Aitex.Core.Account
|
|||
/// </summary>
|
||||
/// <param name="token">客户端登录凭据令牌。</param>
|
||||
/// <returns></returns>
|
||||
public CredentialKeepAliveResults KeepAlive(Credential cred)
|
||||
public CredentialKeepAliveResults KeepAlive(Guid myToken)
|
||||
{
|
||||
return CredentialManager.Instance.KeepAlive(cred);
|
||||
return CredentialManager.Instance.KeepAlive(myToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -199,17 +199,17 @@ public class CredentialManager : Singleton<CredentialManager>
|
|||
/// </summary>
|
||||
/// <param name="cred">客户端登录凭据</param>
|
||||
/// <returns></returns>
|
||||
public CredentialKeepAliveResults KeepAlive(Credential cred)
|
||||
public CredentialKeepAliveResults KeepAlive(Guid myToken)
|
||||
{
|
||||
lock (_syncRoot)
|
||||
{
|
||||
if (_dictCredentialsLoggedIn.TryGetValue(cred.Token, out var loginCred))
|
||||
if (_dictCredentialsLoggedIn.TryGetValue(myToken, out var loginCred))
|
||||
{
|
||||
loginCred.LastAliveTime = DateTime.Now; // 刷新时间
|
||||
|
||||
// 如果当前用户名在请求登录列表中,则返回CredentialKeepAliveResults.RequestingLogin,通知
|
||||
// 已登录的客户端,当前用户正在请求异地登录。
|
||||
return _dictCredentialsRequesting.ContainsKey(cred.AccountInfo.LoginName)
|
||||
return _dictCredentialsRequesting.ContainsKey(loginCred.AccountInfo.LoginName)
|
||||
? CredentialKeepAliveResults.RequestingLogin
|
||||
: CredentialKeepAliveResults.Alive;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ServiceModel;
|
||||
using System.Threading.Tasks;
|
||||
|
@ -57,7 +58,6 @@ namespace Aitex.Core.Account
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Permission Operations
|
||||
|
||||
|
||||
|
@ -87,7 +87,6 @@ namespace Aitex.Core.Account
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Role Operations
|
||||
|
||||
/// <summary>
|
||||
|
@ -137,7 +136,6 @@ namespace Aitex.Core.Account
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Account Operations
|
||||
|
||||
/// <summary>
|
||||
|
@ -253,9 +251,9 @@ namespace Aitex.Core.Account
|
|||
/// <summary>
|
||||
/// 注销登录。
|
||||
/// </summary>
|
||||
/// <param name="cred">ƾ¾Ý</param>
|
||||
/// <param name="myToken">当前登录的令牌</param>
|
||||
[OperationContract]
|
||||
void LogoutEx(Credential cred);
|
||||
void LogoutEx(Guid myToken);
|
||||
|
||||
/// <summary>
|
||||
/// 取消登录请求。
|
||||
|
@ -267,25 +265,24 @@ namespace Aitex.Core.Account
|
|||
/// <summary>
|
||||
/// 确认异地登录请求。
|
||||
/// </summary>
|
||||
/// <param name="requestingCred"></param>
|
||||
/// <param name="userName">正在请求登录的令牌</param>
|
||||
[OperationContract]
|
||||
void ConfirmLoginRequest(Credential requestingCred);
|
||||
void ConfirmLoginRequest(string userName);
|
||||
|
||||
/// <summary>
|
||||
/// 拒绝异地登录请求。
|
||||
/// </summary>
|
||||
/// <param name="requestingCred"></param>
|
||||
/// <param name="userName">正在请求登录的令牌</param>
|
||||
[OperationContract]
|
||||
void RejectLoginRequest(Credential requestingCred);
|
||||
|
||||
void RejectLoginRequest(string userName);
|
||||
|
||||
/// <summary>
|
||||
/// 激活凭据。
|
||||
/// </summary>
|
||||
/// <param name="cred">ƾ¾Ý</param>
|
||||
/// <param name="myToken">当前登录的令牌</param>
|
||||
/// <returns></returns>
|
||||
[OperationContract]
|
||||
CredentialKeepAliveResults KeepAlive(Credential cred);
|
||||
CredentialKeepAliveResults KeepAlive(Guid myToken);
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
|
|
@ -577,6 +577,7 @@
|
|||
<Compile Include="MECF\Framework\Common\Account\Extends\AccountEx.cs" />
|
||||
<Compile Include="MECF\Framework\Common\Account\Extends\AppMenu.cs" />
|
||||
<Compile Include="MECF\Framework\Common\Account\Extends\MenuLoader.cs" />
|
||||
<Compile Include="MECF\Framework\Common\Account\Extends\ReadOnlyRole.cs" />
|
||||
<Compile Include="MECF\Framework\Common\Account\Extends\Role.cs" />
|
||||
<Compile Include="MECF\Framework\Common\Account\Extends\RoleLoader.cs" />
|
||||
<Compile Include="MECF\Framework\Common\Account\Extends\UserContext.cs" />
|
||||
|
|
|
@ -285,10 +285,10 @@ namespace MECF.Framework.Common.Account
|
|||
/// <summary>
|
||||
/// 确认登录请求。
|
||||
/// </summary>
|
||||
/// <param name="requestingCred"></param>
|
||||
internal void ConfirmedLoginRequest(Credential requestingCred)
|
||||
/// <param name="userName"></param>
|
||||
internal void ConfirmedLoginRequest(string userName)
|
||||
{
|
||||
var cred = CredentialManager.Instance.GetRequestingCredential(requestingCred.AccountInfo.LoginName);
|
||||
var cred = CredentialManager.Instance.GetRequestingCredential(userName);
|
||||
if (cred != null)
|
||||
cred.State = CredentialState.Confirmed;
|
||||
}
|
||||
|
@ -296,24 +296,24 @@ namespace MECF.Framework.Common.Account
|
|||
/// <summary>
|
||||
/// 拒绝登录请求。
|
||||
/// </summary>
|
||||
/// <param name="requestingCred"></param>
|
||||
internal void RejectLoginRequest(Credential requestingCred)
|
||||
/// <param name="userName"></param>
|
||||
internal void RejectLoginRequest(string userName)
|
||||
{
|
||||
var cred = CredentialManager.Instance.GetRequestingCredential(requestingCred.AccountInfo.LoginName);
|
||||
var cred = CredentialManager.Instance.GetRequestingCredential(userName);
|
||||
if (cred != null)
|
||||
cred.State = CredentialState.Reject;
|
||||
}
|
||||
|
||||
internal void Logout(Credential cred)
|
||||
internal void Logout(Guid myToken)
|
||||
{
|
||||
var loginCred = CredentialManager.Instance.GetCredential(cred.Token);
|
||||
var loginCred = CredentialManager.Instance.GetCredential(myToken);
|
||||
if (loginCred != null)
|
||||
{
|
||||
EV.PostMessage(ModuleName.System.ToString(), EventEnum.UserLoggedOff,
|
||||
$"{loginCred.AccountInfo.LoginName}@{loginCred.LoginIP}:{loginCred.LoginPort}");
|
||||
}
|
||||
|
||||
CredentialManager.Instance.Remove(cred.Token);
|
||||
CredentialManager.Instance.Remove(myToken);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -0,0 +1,25 @@
|
|||
using MECF.Framework.Common.Account;
|
||||
using MECF.Framework.Common.Account.Extends;
|
||||
|
||||
namespace MECF.Framework.Common.MECF.Framework.Common.Account.Extends
|
||||
{
|
||||
/// <summary>
|
||||
/// 只读权限的角色。
|
||||
/// </summary>
|
||||
public class ReadOnlyRole : Role
|
||||
{
|
||||
#region Constructors
|
||||
|
||||
public ReadOnlyRole() : base("-1", "ReadOnly", false, 0, null, true, "")
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public override MenuPermissionEnum GetPermission(string name)
|
||||
{
|
||||
return MenuPermissionEnum.MP_NONE;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,9 +19,9 @@ namespace MECF.Framework.Common.Account.Extends
|
|||
private string _permissionContent;
|
||||
private string _description;
|
||||
|
||||
#endregion
|
||||
#endregion
|
||||
|
||||
#region Constructors
|
||||
#region Constructors
|
||||
|
||||
/// <summary>
|
||||
/// 构造角色的对象实例。
|
||||
|
@ -146,7 +146,7 @@ namespace MECF.Framework.Common.Account.Extends
|
|||
/// </summary>
|
||||
/// <param name="name"></param>
|
||||
/// <returns></returns>
|
||||
public MenuPermissionEnum GetPermission(string name)
|
||||
public virtual MenuPermissionEnum GetPermission(string name)
|
||||
{
|
||||
if (PermissionControlItems.TryGetValue(name, out var permissionEnum))
|
||||
return permissionEnum;
|
||||
|
|
|
@ -290,36 +290,36 @@ namespace MECF.Framework.UI.Core.Accounts
|
|||
});
|
||||
}
|
||||
|
||||
public void ConfirmLoginRequest(Credential requestingCred)
|
||||
public void ConfirmLoginRequest(string userName)
|
||||
{
|
||||
WCFProxy.Using(delegate(IAccountService svc)
|
||||
{
|
||||
svc.ConfirmLoginRequest(requestingCred);
|
||||
svc.ConfirmLoginRequest(userName);
|
||||
});
|
||||
}
|
||||
|
||||
public void RejectLoginRequest(Credential requestingCred)
|
||||
public void RejectLoginRequest(string userName)
|
||||
{
|
||||
WCFProxy.Using(delegate(IAccountService svc)
|
||||
{
|
||||
svc.RejectLoginRequest(requestingCred);
|
||||
svc.RejectLoginRequest(userName);
|
||||
});
|
||||
}
|
||||
|
||||
public void LogoutEx(Credential cred)
|
||||
public void LogoutEx(Guid myToken)
|
||||
{
|
||||
WCFProxy.Using(delegate(IAccountService svc)
|
||||
{
|
||||
svc.LogoutEx(cred);
|
||||
svc.LogoutEx(myToken);
|
||||
});
|
||||
}
|
||||
|
||||
public CredentialKeepAliveResults KeepAlive(Credential cred)
|
||||
public CredentialKeepAliveResults KeepAlive(Guid myToken)
|
||||
{
|
||||
var result = CredentialKeepAliveResults.NotFound;
|
||||
WCFProxy.Using(delegate(IAccountService svc)
|
||||
{
|
||||
result = svc.KeepAlive(cred);
|
||||
result = svc.KeepAlive(myToken);
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -22,11 +22,27 @@ namespace UserLoginTester
|
|||
Console.WriteLine(@"Accounts:");
|
||||
foreach (var acc in accounts)
|
||||
{
|
||||
Console.WriteLine($@" {acc.LoginName}");
|
||||
Console.WriteLine($@" {acc.LoginName}");
|
||||
}
|
||||
Console.ResetColor();
|
||||
|
||||
while (true)
|
||||
var ret = await AccountClient.Instance.Service.LoginEx("admin", "admin", "0", new LoginClientInfo());
|
||||
if (ret.Result == LoginRequestResults.Confirmed)
|
||||
{
|
||||
Console.WriteLine("Login Succeeded!");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"Login Failed, {ret.Result}");
|
||||
}
|
||||
|
||||
Console.WriteLine("Press ENTER to exit...");
|
||||
Console.ReadLine();
|
||||
AccountClient.Instance.Service.LogoutEx(ret.Credential.Token);
|
||||
|
||||
|
||||
/*
|
||||
while (true)
|
||||
{
|
||||
var cmd = WaitCommand();
|
||||
if(string.IsNullOrEmpty(cmd))
|
||||
|
@ -37,6 +53,7 @@ namespace UserLoginTester
|
|||
|
||||
ParseCommand(cmd);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
private static string WaitCommand()
|
||||
|
@ -88,7 +105,7 @@ namespace UserLoginTester
|
|||
|
||||
private static void LogoutProcess()
|
||||
{
|
||||
AccountClient.Instance.Service.LogoutEx(_loginCred);
|
||||
AccountClient.Instance.Service.LogoutEx(_loginCred.Token);
|
||||
}
|
||||
|
||||
private static void Instance_OnDisconnectedWithRT()
|
||||
|
@ -121,11 +138,11 @@ namespace UserLoginTester
|
|||
switch (ack)
|
||||
{
|
||||
case "Y":
|
||||
AccountClient.Instance.Service.ConfirmLoginRequest(requestingCred);
|
||||
AccountClient.Instance.Service.LogoutEx(_loginCred);
|
||||
AccountClient.Instance.Service.ConfirmLoginRequest(requestingCred.AccountInfo.LoginName);
|
||||
AccountClient.Instance.Service.LogoutEx(_loginCred.Token);
|
||||
break;
|
||||
case "N":
|
||||
AccountClient.Instance.Service.RejectLoginRequest(requestingCred);
|
||||
AccountClient.Instance.Service.RejectLoginRequest(requestingCred.AccountInfo.LoginName);
|
||||
break;
|
||||
default:
|
||||
goto __prompt;
|
||||
|
|
Loading…
Reference in New Issue