有时我们需要在调用一个方法前加判断,比如当前用户是否有权限来调用此方法。

常规做法在NET中是自己做一个Attribute来完成,不过在4.5中有System.Security.Permissions.PrincipalPermissionAttribute可以协助我们,用的是System.Security.Claims.Claim及System.Security.Claims.ClaimTypes。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Security.Claims;
 4 using System.Security.Permissions;
 5 using System.Threading;
 6
 7 namespace ApiSecurityTest
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             var claims = new List<Claim>()
14             {
15                 new Claim(ClaimTypes.Name, "badri"),
16                 new Claim(ClaimTypes.Email, "badri@nowhere.com"),
17                 new Claim(ClaimTypes.Role, "StoreMandager"),
18                 new Claim(ClaimTypes.Role, "BackOfficeClerk")
19             };
20
21             var id = new ClaimsIdentity(claims, "Dummy"); // Non-empty string is needed as authentication type
22             var principal = new ClaimsPrincipal(new[] { id });
23             Thread.CurrentPrincipal = principal;
24
25             MakeDiscount();
26
27             Console.WriteLine();
28             Console.ReadLine();
29         }
30
31         [PrincipalPermission(SecurityAction.Demand, Role = "StoreManager")] // Declarative
32         private static void MakeDiscount()
33         {
34             try
35             {
36                 Console.WriteLine(Thread.CurrentPrincipal.IsInRole("StoreManager"));
37                 Console.WriteLine("Discount of 10% has been applied");
38             }
39             catch
40             {
41                 Console.WriteLine("no access");
42             }
43         }
44     }
45 }

这样只有当StoreManager的人才能调用此方法,如果不是此类用户就会报SecurityException。

除上述特性外,还有KeyContainerPermissionAttribute,看程序是基于哪种做权限处理。

转载于:https://www.cnblogs.com/xwang/p/3799515.html

控制方法只有相应权限才可执行相关推荐

  1. linux 可执行文件权限不够,root执行/media可执行文件权限不够,chmod修改权限无效...

    问题: 我想执行media文件夹下自己写的某个程序,但无法执行? 1. 于是我以root的身份在终端以输入指令chmod a+x 1,回车后没反应,查询该文件夹的属性,也没有改变,即修改权限无效. 2 ...

  2. linux 权限 x 表示,在Linux系统中,用户对目录拥有“x”权限,表示可以执行下列哪种操作?...

    在Linux系统中,用户对目录拥有"x"权限,表示可以执行下列哪种操作? 更多相关问题 通过花的中心只能作1个对称面称辐射对称花. 王叔和归纳了脉象( )种,规范了脉象名称. 车轮 ...

  3. 给脚本添加可执行权限,并执行脚本 转

    给脚本添加可执行权限,并执行脚本 添加可执行权限 方式1:chmod +x test.sh. 或者 方式2chmod 755 test.sh 执行脚本 方式1:此时再双击test.sh文件就可以运行了 ...

  4. java进阶 线程池 join用法总结:thread4.join();方法,就表明thread4.join();这个线程受到贵客待遇,直到这个线程执行完,被插入这个方法的载体线程才可以执行。

    那个线程调用join 举例 thread4.join();方法,就表明thread4.join();这个线程受到贵客待遇,直到这个线程执行完,被插入这个方法的载体线程才可以执行. package ja ...

  5. php 赋予最高权限,为PHP执行赋予root权限(一)

    这几天弄的东西涉及到php利用shell脚本与Linux的交互,我们知道利用php运行脚本来访问Linux是以Apach的身份来执行的,因此它自己能够所做的事情很少的,因为没有足够的权限,这里就涉及到 ...

  6. win10你需要计算机管理员提供的权限才能操作,解决win10提示“你需要权限能才能执行此操作”的方案...

    不知道大家在使用win10电脑的时候有没有遇到过这种情况,每次需要删除或是对某一文进行重命名的时候都会遇到系统提示:"你需要权限能才能执行此操作"!这样的操作在电脑系统中就需要使用 ...

  7. iOS 如何巧妙解决“一个任务需要等待另外一个任务完成后才可以执行”的问题

    看到标题,我想大部分iOS开发的童鞋能想到好几种方案.比如下一个网络请求必须依赖上一个网络请求的结果才可以进行,最简单直白的方法是:"同步调用".这里所说的同步是指,等上一个网络请 ...

  8. js中的onclick事件在ul获取li时点击两次才会执行的原因

    js中的onclick事件在ul获取li时点击两次才会执行的原因 下面的代码中 只有onclick第二次才会执行函数内部的代码 代码实例如下: <!DOCTYPE html> <ht ...

  9. python函数只有被调用才会执行_Python函数

    1.函数的定义 python内置了很多函数,可以直接调用,多数情况下,还需要自定义函数,自定义函数的主体,换行的缩进表示代码属于该函数.定义的函数只有被调用的时候才会执行.函数只有有返回值的情况下才可 ...

  10. linux修改rc.local权限,Linux 7 的 rc.local 文件需要 添加 +x 权限才会自动执行

    vmware 克隆的虚拟机添加的网关的没有生效,每次重启后都需要手工添加网关. 所以将添加命令写到/etc/rc.local 文件里了. https://www.cndba.cn/dave/artic ...

最新文章

  1. Linux下安装Weblogic10.3.6并创建简单集群测试
  2. Linux内核同步机制之(四):spin lock【转】
  3. 你是一个有价值的产品经理吗?
  4. k8s部署nacos集群:3个pod、连接外部mysql读写分离集群
  5. Win8.1部署 .NET Framework 3.5 安装方式
  6. Hyperledger Fabric学习笔记(二)- Fabric 2.2.1环境搭建
  7. Chapter 15 配置服务器存储和群集 第1课
  8. C# 自定义配置文件
  9. 从零开始学前端:定时器、Math对象 --- 今天你学习了吗?(JS:Day12)
  10. Android中Menu的基本用法
  11. [古怪问题] Marshal.GetActiveObject 在管理员模式下无法正常运行
  12. Last-Modify、ETag、Expires和Cache-Control(转载)
  13. cmosfixr插件怎么用_Excel处理临床数据:插件篇
  14. 企业微信邮箱可以移动办公吗?
  15. dfuse 加入 BGA 区块链游戏联盟
  16. 超出预算,他的处理的方式对吗? | 每天成就更大成功
  17. 2011年北邮各组组线
  18. 动物识别系统c语言编程,人工智能期末论文-简单动物识别系统的知识表示.doc
  19. Docker USER 指定当前用户
  20. 按键脚本c语言,按键精灵脚本(示例代码)

热门文章

  1. MySQL 编码相关小结
  2. PHP导航栏管理,zblog导航栏管理设置的几种方法
  3. 2021-1-30Linux学习纪要
  4. lgg8各个版本_LG正式推出G8SThinQ 搭载骁龙855
  5. python 几何计算_计算几何-凸包算法 Python实现与Matlab动画演示
  6. (day 19 - 动态规划)剑指 Offer 42. 连续子数组的最大和
  7. ftp文件服务器坑,Java实现FTP上传文件到Linux服务器的那些坑
  8. android 背景逐渐变暗,UI:使View背景逐渐变暗的方法
  9. php 是否存在,php判断常量是否存在
  10. java两个数最大公约数和最小公倍数_java中请给出例子程序:找出两个数的最大公约数和最小公倍数...