成员资格标识,在第一篇验证用户代码中使用
public sealed class MemberPrincipal : GenericPrincipal, NXDO.WinUI.Security.IMemberPrincipal
{
/// <summary>
/// 从用户标识和角色名称数组(标识表示的用户属于该数组)初始化 MemberPrincipal 类的新实例。
/// </summary>
/// <param name="identity">表示当前应用程序的成员用户</param>
/// <param name="roles">参数表示的用户所属的角色名称数组</param>
public MemberPrincipal(MemberIdentity identity, string[] roles)
: base(identity, roles)
{
if (roles != null)
{
if(roles.Length>0)
this.HasRoleConfig = true;
}
}
/// <summary>
/// 获取当前 MemberPrincipal 表示的用户的 MemberIdentity。
/// </summary>
new public IIdentity Identity
{
get
{
return base.Identity;
}
}
/// <summary>
/// 确定当前 MemberPrincipal 是否属于指定的角色。
/// </summary>
/// <param name="role">要检查其成员资格的角色的名称</param>
/// <returns>如果当前 MemberPrincipal 是指定角色的成员,则为 true;否则为 false</returns>
new public bool IsInRole(string role)
{
return base.IsInRole(role);
}
/// <summary>
/// 当前需要验证的值
/// <remarks>当前所在功能(根据不同的窗体功能而不同)</remarks>
/// </summary>
public string FunctionName
{
get;
set;
}
(在下面的文章中做说明)
/// <summary>
/// 要求权限判断
/// </summary>
/// <param name="action">当前要求的角色所要具有的权限</param>
/// <returns>true:权限验证通过,反之亦然</returns>
public bool Demand(PermissionAction action)
{
if (!HasRoleConfig)
return true;
if (string.IsNullOrEmpty(this.FunctionName))
return true;
bool bDemand = false;
string[] roleNames = Role.Provider.GetRolesForUser(this.Identity.Name);
if (roleNames != null)
{
foreach (string roleName in roleNames)
{
string roleData = (Role.Provider as DbRoleProvider).GetRoleValue(roleName);
string roleItem = (Role.Provider as DbRoleProvider).GetRoleItem(roleName);
if (string.IsNullOrEmpty(roleData)) continue;
bDemand = RolePermissiones.IsExistsPermission(this.UIControls, this.FunctionName, roleData, roleItem, action);
if (bDemand) break;
}
}
return bDemand;
}
/// <summary>
/// 是否具有角色提供程序
/// <remarks>false:不验证权限</remarks>
/// </summary>
public bool HasRoleConfig
{
get;
private set;
}
/// <summary>
/// 是否为系统管理员
/// <remarks>true:具备所有权限,即使不设置权限</remarks>
/// </summary>
public bool IsAdministrator
{
get;
internal set;
}
/// <summary>
/// 当前成员所对应的界面控件信息
/// </summary>
public List<UIControlAccess> UIControls
{
get
{
if (_UIControls == null)
_UIControls = new List<UIControlAccess>();
return _UIControls;
}
}List<UIControlAccess> _UIControls;
}
当前应用程序的成员用户
public sealed class MemberIdentity : GenericIdentity, NXDO.WinUI.Security.IMemberIdentity
{
/// <summary>
/// 初始化 MemberIdentity 类的新实例,该类表示具有指定名称的用户
/// </summary>
/// <param name="name"></param>
public MemberIdentity(string name) : base(name)
{
}
/// <summary>
/// 初始化 MemberIdentity 类的新实例,该类表示具有指定名称和身份验证类型的用户
/// </summary>
/// <param name="name">用户名,代码当前即以该用户的名义运行</param>
/// <param name="type">用于标识用户的身份验证的类型</param>
public MemberIdentity(string name, string type)
: base(name, type)
{
}
/// <summary>
/// 获取用于标识用户的身份验证的类型
/// </summary>
public string AuthenticationType
{
get
{
return base.AuthenticationType;
}
}
/// <summary>
/// 获取一个值,该值指示是否验证了用户
/// <remarks>如果已验证了用户,则为 true;否则为 false</remarks>
/// </summary>
public bool IsAuthenticated
{
get
{
return base.IsAuthenticated;
}
}
/// <summary>
/// 获取用户的名称
/// <remarks>用户名,代码当前即以该用户的名义运行</remarks>
/// </summary>
public string Name
{
get
{
return base.Name;
}
}
}