案例1、主体(包含用户和组)和标识(用户名)的使用。

PrincipalPolicy枚举:主体类型 分为window主体、未认证的主体和未分配主体
GenericPrincipal、GenericIdentity主体类:自定义普通的主体,该主体是认证的。
WindowsPrincipal、WindowsIdentity主体类:系统主体
Thread.CurrentPrincipal = principal; 设置当前线程的主体
IIdentity 、IPrincipal 主体类的接口

#region 当前线程
Thread t = null; Console.WriteLine("======PrincipalPolicy.WindowsPrincipal==========="); AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); t = new Thread(new ThreadStart(CurrentThreadInfo));
t.Start();
t.Join(); Console.WriteLine("======PrincipalPolicy.UnauthenticatedPrincipal===========");
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.UnauthenticatedPrincipal);
t = new Thread(new ThreadStart( CurrentThreadInfo));
t.Start();
t.Join(); Console.WriteLine("=====PrincipalPolicy.NoPrincipal===========");
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.NoPrincipal);
t = new Thread(new ThreadStart(CurrentThreadInfo));
t.Start();
t.Join(); Console.WriteLine("======自定义一个主体==========="); IIdentity identity = new GenericIdentity("MyIdentity"); IPrincipal principal = new GenericPrincipal(identity, new[] { "studentc", "student" }); //AppDomain.CurrentDomain.SetThreadPrincipal(principal);
Thread.CurrentPrincipal = principal;
t = new Thread(new ThreadStart(CurrentThreadInfo));
t.Start();
t.Join(); static void CurrentThreadInfo()
{
IPrincipal currentPricipal= Thread.CurrentPrincipal; if (currentPricipal != null )
{
Console.WriteLine($"TYPE:{currentPricipal.Identity.GetType().Name}");
Console.WriteLine($"Name:{currentPricipal.Identity.Name}");
Console.WriteLine($"IsAuthenticated:{currentPricipal.Identity.IsAuthenticated}");
if (currentPricipal.IsInRole("student"))
{
Console.WriteLine("role:student"); }
} else
{
Console.WriteLine("currentPricipal Is Null");
} }

案例二|、

using System.Reflection;
using System.Security.AccessControl;
using System.Security.Permissions;
using System.Security.Principal;
#region 当前进程
//将当前进程设置为安全主体,应用程序默认值为 UnauthenticatedPrincipal。
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); WindowsPrincipal currentProgramePrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
Type type = typeof(WindowsPrincipal);
Console.WriteLine("===============当前进程的主体 标识 ===========================");
//获取当前进程的主体 标识
foreach (var item in type.GetProperties())
{
Console.WriteLine($"{item.Name}:{item.GetValue(currentProgramePrincipal).ToString()}");
if (item.Name == "Identity")
{
WindowsIdentity currentProgrameIdentity = item.GetValue(currentProgramePrincipal) as WindowsIdentity;
Type currentIdentity = typeof(WindowsIdentity);
foreach (var ite in currentIdentity.GetProperties())
{
Console.WriteLine($"{ite.Name}:{ite.GetValue(currentProgrameIdentity)}");
}
}
}
//
Console.WriteLine("===============当前进程主体的角色==========================="); //获取当前进程主体的角色
foreach (var rolename in Enum.GetValues(typeof(WindowsBuiltInRole)))
{
Console.WriteLine($"{rolename.ToString()}:{currentProgramePrincipal.IsInRole((WindowsBuiltInRole)rolename)}"); ;
}
Console.WriteLine("=================当前用户的标识======================"); //获取当前用户的标识
WindowsIdentity identity = WindowsIdentity.GetCurrent();
Type WindowsIdentityType = typeof(WindowsIdentity); foreach (var item in WindowsIdentityType.GetProperties())
{
Console.WriteLine($"{item.Name}:{item.GetValue(identity)}");
}
#endregion

【windows 访问控制】十二、C#实操 主体 System.Security.Principal 案例的更多相关文章

  1. 【windows 访问控制】十一、C# 实操 对象 System.Security.AccessControl 命名空间

    AccessControl 命名空间 结构图 解说: DirectorySecurity=目录ACLFileSecurity=文件ACLFileSystemAuditRule=目录和文件中SACL中的 ...

  2. Win32 Windows编程 十二

    一.对话框 1.对话框的分类 2.对话框的基本使用方式 3.对话框资源 4.有模式对话框的使用 5. 无模式对话框的使用 5.1 加入对话框资源 5.2 定义窗体处理函数 BOOL CALLBACK ...

  3. 【windows 访问控制】二、安全描述符(Security Descriptors,SD)

    安全描述符(Security Descriptors,SD) 定义 安全描述符是与安全对象的安全信息,它含有这个对象所有者的SID,以及一个访问控制列表(ACL,Access Control List ...

  4. Windows Phone 十二、设计器同步

    在设计阶段为页面添加数据源 Blend或者VS的可视化设计器会跑我们的代码,然后来显示出来,当我们Build之后,设计器会进入页面的构造函数,调用InitializeComponent();方法来将U ...

  5. Spring Security(二十二):6.4 Method Security

    From version 2.0 onwards Spring Security has improved support substantially for adding security to y ...

  6. 【windows 访问控制】六、安全标识符(SID Security Identifiers)

    安全标识符(SID Security Identifiers) SID是用来标识安全主体.就是给安全主体一个唯一的ID.用户层面通过用户账户名识别,程序和资源之间通过SID识别. 什么是安全标识符? ...

  7. (二)Linux实操之——网络配置、进程管理、服务管理、组管理、YUM

    接上段   (一)Linux实操之——权限.任务调度.磁盘分区 4.网络配置 4.1 NAT模式的网络配置 目前我们采用的网络配置是NAT模式. windows下cmd通过 ipconfig 命令可以 ...

  8. 号外号外:9月13号《Speed-BI云平台案例实操--十分钟做报表》开讲了

    引言:如何快速分析纷繁复杂的数据?如何快速做出老板满意的报表?如何快速将Speed-BI云平台运用到实际场景中?         本课程将通过各行各业案例背景,将Speed-BI云平台运用到实际场景中 ...

  9. Python实操二

    实操一: 1.用map来处理字符串列表啊,把列表中所有人都变成sb,比方alex_sb name=['alex','wupeiqi','yuanhao'] name=['alex','wupeiqi' ...

随机推荐

  1. java-异常-异常处理原则

    1 异常处理的原则: 2 * 1,函数内部如果抛出需要检测的异常,那么函数上必须要声明. 3 * 否则必须在函数内用trycatch捕捉,否则编译失败. 4 * 5 * 2,如果调用到了声明异常的函数 ...

  2. IEEE754浮点数表示法

    IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)是一套规定如何用二进制表示浮点数的标准.就像"补码规则"建立了二进制位和正负数的一一对应关系一样,IEE ...

  3. Antd组件Table树型多选全选问题

    组件库antd里面的树型选择不能做到勾选父组件然后一起勾选子组件情况,我也不知道是组件库的问题还是原本设计就是这样 刚好组件库存在rowselection的配置项,既然存在拓展方法,又遇到需求,那么就 ...

  4. node.js中的fs.appendFile方法使用说明

    方法说明: 该方法以异步的方式将 data 插入到文件里,如果文件不存在会自动创建.data可以是任意字符串或者缓存. 语法: 代码如下: fs.appendFile(filename, data, ...

  5. go基础——数组array

    package main import "fmt" /* 数组: array数组属于值类型,存储的是数值本身,数据传递给其他变量时传递的是数据的副本. slice,map等属于引用 ...

  6. LeetCode随缘刷题之整数反转

    package leetcode.day_01_29; /** * 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果. * 如果反转后整数超过 32 位的有符号整数的范围[− ...

  7. JS快速入门(二)

    目录 JS快速入门(二) 结构图 BOM window对象 open() window子对象 location对象 history对象(了解) navigator 对象 screen对象 BOM 定时 ...

  8. 使用haproxy的ACL实现基于文件后缀名的动静分离

    一.环境准备 二.实现proxy [root@localhost ~]# yum -y install haproxy #创建子配置 [root@localhost ~]# mkdir /etc/ha ...

  9. uos系统离线状态下进入开发者模式

    需到处机器信息,接着登入指定的uos开发者网站,下载证书,然后在机器上加载证书,重启即可.

  10. Windows office2019免费激活,附代码

    office2019地址:链接:https://pan.baidu.com/s/1zPt5U7b0L-bGHl5AOtYs2w提取码:m5ei 新建一个txt,然后把这段代码放进去,然后保存关闭改后缀 ...