一个 C# 文件权限的帮助类
直接贴代码了:
FilePermissionHelper.cs
using System.Collections.Generic;
using System.IO;
using System.Security.AccessControl;
using System.Security.Principal; namespace MvcSample.Extensions
{
/// <summary>
/// File permission helper
/// </summary>
public static class FilePermissionHelper
{
/// <summary>
/// Check permissions
/// </summary>
/// <param name="path">Path</param>
/// <param name="checkRead">Check read</param>
/// <param name="checkWrite">Check write</param>
/// <param name="checkModify">Check modify</param>
/// <param name="checkDelete">Check delete</param>
/// <returns>Result</returns>
public static bool CheckPermissions(string path, bool checkRead, bool checkWrite, bool checkModify, bool checkDelete)
{
bool flag = false;
bool flag2 = false;
bool flag3 = false;
bool flag4 = false;
bool flag5 = false;
bool flag6 = false;
bool flag7 = false;
bool flag8 = false;
WindowsIdentity current = WindowsIdentity.GetCurrent();
AuthorizationRuleCollection rules;
try
{
rules = Directory.GetAccessControl(path).GetAccessRules(true, true, typeof(SecurityIdentifier));
}
catch
{
return true;
}
try
{
foreach (FileSystemAccessRule rule in rules)
{
if (!current.User.Equals(rule.IdentityReference))
{
continue;
}
if (AccessControlType.Deny.Equals(rule.AccessControlType))
{
if ((FileSystemRights.Delete & rule.FileSystemRights) == FileSystemRights.Delete)
flag4 = true;
if ((FileSystemRights.Modify & rule.FileSystemRights) == FileSystemRights.Modify)
flag3 = true; if ((FileSystemRights.Read & rule.FileSystemRights) == FileSystemRights.Read)
flag = true; if ((FileSystemRights.Write & rule.FileSystemRights) == FileSystemRights.Write)
flag2 = true; continue;
}
if (AccessControlType.Allow.Equals(rule.AccessControlType))
{
if ((FileSystemRights.Delete & rule.FileSystemRights) == FileSystemRights.Delete)
{
flag8 = true;
}
if ((FileSystemRights.Modify & rule.FileSystemRights) == FileSystemRights.Modify)
{
flag7 = true;
}
if ((FileSystemRights.Read & rule.FileSystemRights) == FileSystemRights.Read)
{
flag5 = true;
}
if ((FileSystemRights.Write & rule.FileSystemRights) == FileSystemRights.Write)
{
flag6 = true;
}
}
}
foreach (IdentityReference reference in current.Groups)
{
foreach (FileSystemAccessRule rule2 in rules)
{
if (!reference.Equals(rule2.IdentityReference))
{
continue;
}
if (AccessControlType.Deny.Equals(rule2.AccessControlType))
{
if ((FileSystemRights.Delete & rule2.FileSystemRights) == FileSystemRights.Delete)
flag4 = true;
if ((FileSystemRights.Modify & rule2.FileSystemRights) == FileSystemRights.Modify)
flag3 = true;
if ((FileSystemRights.Read & rule2.FileSystemRights) == FileSystemRights.Read)
flag = true;
if ((FileSystemRights.Write & rule2.FileSystemRights) == FileSystemRights.Write)
flag2 = true;
continue;
}
if (AccessControlType.Allow.Equals(rule2.AccessControlType))
{
if ((FileSystemRights.Delete & rule2.FileSystemRights) == FileSystemRights.Delete)
flag8 = true;
if ((FileSystemRights.Modify & rule2.FileSystemRights) == FileSystemRights.Modify)
flag7 = true;
if ((FileSystemRights.Read & rule2.FileSystemRights) == FileSystemRights.Read)
flag5 = true;
if ((FileSystemRights.Write & rule2.FileSystemRights) == FileSystemRights.Write)
flag6 = true;
}
}
}
bool flag9 = !flag4 && flag8;
bool flag10 = !flag3 && flag7;
bool flag11 = !flag && flag5;
bool flag12 = !flag2 && flag6;
bool flag13 = true;
if (checkRead)
{
//flag13 = flag13 && flag11;
flag13 = flag11;
}
if (checkWrite)
{
flag13 = flag13 && flag12;
}
if (checkModify)
{
flag13 = flag13 && flag10;
}
if (checkDelete)
{
flag13 = flag13 && flag9;
}
return flag13;
}
catch (IOException)
{
}
return false;
}
}
}
谢谢浏览!
一个 C# 文件权限的帮助类的更多相关文章
- c++ 一个cpp文件如何调用另一个cpp文件已经定义的类?我不想重复定义
文件test1.cpp有类class A;文件test2.cpp有类class B.如在test2.cpp中想用A:#include "test1.cpp" 当然一般的做法是将类的 ...
- RobotFramework中加载自定义python包中的library(一个py文件中有多个类)
结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...
- 一个java文件中有几个类,编译后有几个class文件?
在一个源文件中用class关键字定义了几个类,编译的时候就会产生几个字节码文件
- 【转】第六章、Linux 的文件权限与目录配置
原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission.php 最近更新日期:2009/08/18 Linux最优秀的地方之一, ...
- CentOS文件权限管理
目录 文件属性 chown更改所有者 chgrp更改所属组 文件权限rwx chmod修改权限 默认权限umask 权限判定的顺序 特殊权限SUID,SGID,sticky 隐藏权限chattr,ls ...
- 一个.java文件中是否可以有多个类
前段时间,有个同事问到我这个问题:一个.java文件中是否可以有多个类? 答案:可以有多个类,但最多只能有一个被public修饰的class. 且若这个.java文件中有一个public类型的clas ...
- 一个Java文件至多包含一个公共类
编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...
- Java基础-一个java文件多个类的问题
一个.java文件当然可以包括多个类.但这些类有一个特殊的类与其它的不同,,这个类是带public 属性的类.一个.java类文件中仅有一个public属性的类.而且这个类与文件名相同.
- qt之窗口换肤(一个qss的坑:当类属性发现变化时需要重置qss,使用rcc资源文件)
1.相关文章 Qt 资源系统qt的moc,uic,rcc命令的使用 2.概要 毕业两年了,一直使用的是qt界面库来开发程序,使用过vs08.10.13等开发工具,并安装了qt的插件,最近在做客户 ...
随机推荐
- 识别率很高的java文字识别技术
java文字识别程序的关键是寻找一个可以调用的OCR引擎.tesseract-ocr就是一个这样的OCR引擎,在1985年到1995年由HP实验室开发,现在在Google.tesseract-ocr ...
- 如何开发使用自定义文件的OEM应用程序
有关创建和使用自定义数据文件的详细信息,请参阅DISM应用程序包(.appx或.appxbundle)服务命令行选项. 了解如何开发使用自定义文件的应用程序,将信息从OEM传递到应用程序. 对于您为O ...
- [Swift]LeetCode1036.逃离大迷宫 | Escape a Large Maze
In a 1 million by 1 million grid, the coordinates of each grid square are (x, y) with 0 <= x, y & ...
- Spring 进入Controller前参数校验
在进入Controller前完成参数的校验,针对对象参数 分为两个验证方式 (1)直接使用已定义的校验方式 1.在需要进行校验的属性上增加校验类型注解 import java.util.Date; i ...
- ABP框架连接Mysql数据库
开始想用Abp框架来搭建公司的新项目,虽然一切还没有定数,但是兵马未动,粮草先行,我先尝试一下整个过程,才能够更好的去争取机会. 此次技术选型:Abp(Asp.Net core mvc)+mysql( ...
- C# Lambda表达式和linq表达式 之 匿名对象查询接收
很多小伙伴都用过Lambda表达式和linq表达式,用起来也得心应手,但是有的小伙伴 对匿名对象的查询与接收比较迷茫,(没有定义相应的实体),怎么在where()里面进行 条件筛选呢?常规用法我就不说 ...
- 粮草先行——Android折叠屏开发技术点(一)
最近有关折叠屏产品的新闻层出不穷,各家手机厂商也分别慢慢地亮出了自家的产品.然而市场上的一些APP仍然没有很好地适配这样的设备,显示不正常和应用重启的状况时有发生.因此,我会用接下来的几篇文章来点出有 ...
- 常用vi编辑器命令行
游标控制: h 游标向左移 j 游标向下移 k 游标向上移 l(or spacebar) 游标向右移 w 向前移动一个单词 b 向后移动一个单词 e 向前移动一个单词,且游标指向单词的末尾 ( 移到当 ...
- dbutils工具类使用
1DBUtils工具类 1.1概述 DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码 DBUtils三个核心功 ...
- Java自增和自减操作符——++/--的那些事
1. 概述 自增操作符(++)和自减操作符(--)是对变量进行加1和减1的操作. 2.分类说明 ++和--是对变量进行自增1和自减1的简写操作符.许多编程任务中经常需要对变量加1或者减1,所以采用这两 ...