最近看书《编写高质量代码改善C#程序的157个建议》,知识点备忘:

  System.Security.Principal.GenericIdentity==>表示一般用户

  System.Security.Principal.GenericPrincipal==>表示一般主体

  System.Security.Permissions.PrincipalPermission==>允许使用为声明和强制安全性操作定义的语言结构来检查活动用户

在某些情况下,我们可能会遇到需求=》在C#中提供基于角色的安全性控制区限制代码的执行权限

Demo1(用户必须以Administrator身份运行代码,才可访问Sample类):

  

class Program{
static void Main(){
  AppDomain.CurrentDomain.SetPrincipalPolicy(System.Security.Principal.PrincipalPolicy.WindowsPrincipal);
     Sample sample=new Sample();
     Console.WriteLine("代码成功运行....");
}
} [PrincipalPermission(SecurityAction.Demand, Role = @"Administrator")]
//[PrincipalPermission(SecurityAction.Demand, Role = @"Users")]//(取消注释,则Users用户也可访问)
class Sample{
}

  非Administrator用户身份,运行此代码,会抛出异常System.Security.SecurityException:对主体权限的请求失败;可以使用多个PrincipalPermission属性标签,互相之间是OR关系;

同样,此标签也可用于控制方法:

Demo2:

class Program{
static void Main(string[] args){
System.Security.Principal.GenericIdentity examIdentity = new GenericIdentity("ExamUser");
string[] users = { "Student"};
//string[] users = { "Student","Teacher"};
GenericPrincipal myPrincipal = new GenericPrincipal(examIdentity, users);
Thread.CurrentPrincipal = myPrincipal;
ScoreProcessor sc = new ScoreProcessor();
sc.Update(); Console.ReadKey();
}
} class ScoreProcessor
{
public void Update()
{
try
{
System.Security.Permissions.PrincipalPermission myPermission = new PrincipalPermission("ExamUser", "Teacher");
myPermission.Demand();
Console.WriteLine("修改成功");
}
catch (SecurityException e)
{
Console.WriteLine(e.Message);
}
}
}

方法权限控制Demo

  通过此demo,可以控制权限,使分数的Update修改方法,只有Teacher身份的用户才能正常执行(注:PrincipalPermission类的Demand()函数只有被执行到时,才会进行校验);

(C#)为应用程式设定运行权限(System.Security类下的GenericIdentity,GenericPrincipal,PrincipalPermission)的更多相关文章

  1. 编写高质量代码改善C#程序的157个建议——建议121:为应用程序设定运行权限

    建议121:为应用程序设定运行权限 在某些情况下,可能存在这样的需求:只有系统管理员才能访问某应用程序的若干功能.这个时候,可以结合.NET中提供的代码访问安全性(Code Access Securi ...

  2. 自定义工作流活动运行产生System.Security.SecurityException

    摘要: 微软动态CRM专家罗勇 ,回复305或者20190224可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 最近碰到一个 ...

  3. Android——SMS接收发短信与运行权限

    好久没写了,最近学习Android的相关知识,包括UI组件与布局.Activity生命周期等,而这次要讲的是,Broadcast Receiver的相关知识,主要是接收发短信,SmsManager.S ...

  4. CRM 2016 请求"System.Security.Permissions.FilelOPermission,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"类型的权限已失败.

    CRM 请求"System.Security.Permissions.FilelOPermission,mscorlib,Version=4.0.0.0,Culture=neutral,Pu ...

  5. dotnetnuke 调用第三方dll出错 System.Security.Permissions.SecurityPermission,型的权限已失败。

    在dnn下调用第三方dll的微信sdk ,代码如下: WebClient wc = new WebClient();  wc.Encoding = encoding ?? Encoding.UTF8; ...

  6. 异常详细信息: System.Security.SecurityException: 未找到源,不过,未能搜索部分或所有事件日志。 若要创建源,您需要用于读取所有事件日志的权限以确保新的源名称是唯一的。 不可访问的日志: Security。

    “/”应用程序中的服务器错误. 安全性异常 说明: 应用程序尝试执行安全策略不允许的操作.要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别. 异常详细信息: Sy ...

  7. Jenkins 运行权限问题

    yum安装的Jenkins 配置文件默认位置/etc/sysconfig/jenkins 默认jenkins服务以jenkins用户运行,这时在jenkins执行maven脚本时可能会发生没有权限操作 ...

  8. "System.Security.Cryptography.CryptographicException: 拒绝访问" 问题的解决方法

    .net web程序使用rsa算法进行加解密时,程序报告“System.Security.Cryptography.CryptographicException: 拒绝访问”错.按网上搜的解决方法做了 ...

  9. System.Security.SecurityException The source was not found, but some or all event logs could not be searched.Inaccessible logs Security.

    An exception occurred during the Install phase. System.Security.SecurityException The source was not ...

随机推荐

  1. 【bzoj1076】【SCOI2008】【奖励关】期望最优值dp

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=60582219 Description 你正在玩你 ...

  2. NSOperationQueue 和 NSOperation

    The NSOperationQueue class regulates the execution of a set of NSOperation objects. After being adde ...

  3. ios学习流水账1

    1.UIImageview设边框.圆角 需要引QuartzCore/QuartzCore.h> //设UIImageView边框 CALayer *layer = [m_imgView laye ...

  4. Vue的常用指令v-if, v-for, v-show,v-else, v-bind, v-on

    Vue.js的指令是以v-开头的,它们作用于HTML元素,指令提供了一些特殊的特性,将指令绑定在元素上时,指令会为绑定的目标元素添加一些特殊的行为,我们可以将指令看作特殊的HTML特性(attribu ...

  5. Android 常驻与很驻型广播的差别,及ListView优化,Android新手基本知识巩固

    1.常驻型广播  常驻型广播,当你的应用程序关闭了,假设有广播信息来,你写的广播接收器相同的能接受到.  他的注冊方式就是在你的应用程序中的AndroidManifast.xml进行注冊. 通常说这样 ...

  6. [Erlang危机](4.1)作业控制模式

    原创文章,转载请注明出处:服务器非业余研究http://blog.csdn.net/erlib 作者Sunface 联系邮箱:cto@188.com Job Control Mode 作业控制模式 T ...

  7. Qt中的非模式窗口配置;

    Test7_5A::Test7_5A(QWidget *parent) : QMainWindow(parent){ ui.setupUi(this); m_searchwin = new Searc ...

  8. adb 设备不识别

    android真坑 有两台测试机 都能连能snapdragon profiling了 忽然 一台不能识别了 adb devices 就不存在 一台一直是好的 kill server start ser ...

  9. [转载]How to Install Google Chrome 39 in CentOS/RHEL 6 and Fedora 19/18

    FROM: http://tecadmin.net/install-google-chrome-in-centos-rhel-and-fedora/ Google Chrome is a freewa ...

  10. asp.net敏感词过滤

    敏感词过滤是一个能够让用户发表评论的网站的一个很重要的功能(你懂的~) 下面开始全套流程: 1.需要有一套比较完整的词库,由于我的词库很少所以就不贴上来了,网上找找应该很多 2.设计一个可以将词库导入 ...