直接贴代码了:

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# 文件权限的帮助类的更多相关文章

  1. c++ 一个cpp文件如何调用另一个cpp文件已经定义的类?我不想重复定义

    文件test1.cpp有类class A;文件test2.cpp有类class B.如在test2.cpp中想用A:#include "test1.cpp" 当然一般的做法是将类的 ...

  2. RobotFramework中加载自定义python包中的library(一个py文件中有多个类)

    结构如下: appsdk\ appsdk.py(这里面有多个类,包括appsdk,appsdksync等类) __init__.py ... ① 有个appsdk的文件夹(符合python包的定义) ...

  3. 一个java文件中有几个类,编译后有几个class文件?

    在一个源文件中用class关键字定义了几个类,编译的时候就会产生几个字节码文件

  4. 【转】第六章、Linux 的文件权限与目录配置

    原文网址:http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission.php 最近更新日期:2009/08/18 Linux最优秀的地方之一, ...

  5. CentOS文件权限管理

    目录 文件属性 chown更改所有者 chgrp更改所属组 文件权限rwx chmod修改权限 默认权限umask 权限判定的顺序 特殊权限SUID,SGID,sticky 隐藏权限chattr,ls ...

  6. 一个.java文件中是否可以有多个类

    前段时间,有个同事问到我这个问题:一个.java文件中是否可以有多个类? 答案:可以有多个类,但最多只能有一个被public修饰的class. 且若这个.java文件中有一个public类型的clas ...

  7. 一个Java文件至多包含一个公共类

    编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...

  8. Java基础-一个java文件多个类的问题

    一个.java文件当然可以包括多个类.但这些类有一个特殊的类与其它的不同,,这个类是带public 属性的类.一个.java类文件中仅有一个public属性的类.而且这个类与文件名相同.

  9. qt之窗口换肤(一个qss的坑:当类属性发现变化时需要重置qss,使用rcc资源文件)

    1.相关文章 Qt 资源系统qt的moc,uic,rcc命令的使用 2.概要    毕业两年了,一直使用的是qt界面库来开发程序,使用过vs08.10.13等开发工具,并安装了qt的插件,最近在做客户 ...

随机推荐

  1. July 01st. 2018, Week 27th. Sunday

    Empty your cup so that it may be filled. 清空杯子,方能再次装满. From Bruce Lee. We can't learn anything new if ...

  2. .NET 基金会完成第一次全面改选

    .NET基金会是一个独立的组织,支持.NET社区和开源,旨在拓宽和加强.NET生态系统和社区.这可以通过多种方式完成,包括项目指导,指导,法律和营销帮助,技术和财务支持设置等,2014年微软组织成立. ...

  3. kubernetes 安装备注

    一.安装环境 阿里云:centos 7.3 master节点:外网IP(116.62.205.90).内网IP(172.16.223.200) node节点:外网IP(116.62.212.174). ...

  4. EscapeAndUnescapeUtil【java模拟js的escape和unescape函数】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 在这里做一个记录,基本代码同参考资料<java模拟js的escape和unescape函数>一样. 效果图     代码 ...

  5. jenkins maven 自动远程发布到服务器,钉钉提醒团队

    jenkins 自动远程发布到服务器 1.安装jenkins 安装过程:自行百度 英文不好的,不要装最新版的jenkins.建议安装Jenkins ver. 2.138.4,此版本可以设置中文语言,设 ...

  6. Python:游戏:贪吃蛇原理及代码实现

    一.游戏介绍 贪吃蛇是个非常简单的游戏,适合练手.先来看一下我的游戏截图: 玩法介绍:回车键:开始游戏空格键:暂停 / 继续↑↓←→方向键 或 WSAD 键:控制移动方向. 食物分红.绿.蓝三种,分别 ...

  7. 从PRISM开始学WPF(二)Prism-更新至Prism7.1

    0x1 PRISM? PRISM项目地址:https://github.com/PrismLibrary/Prism 先看下简介: Prism is a framework for building ...

  8. #6 判断一个数是否为2的n次方

    「ALBB面试题」 [题目] 如何判断一个数是否为2的n次方 [题目分析] 看到这种题,相信大家第一反应就是循环除2,这样做肯定是可以得出结果的:但是这种做法无疑大大增加了计算机的运行时间,一个非常大 ...

  9. 权限管理系统之SpringBoot集成LayUI实现后台管理首页

    万事开头难,昨天一直在构思用户权限管理系统怎么实现,实现哪些需求,采用什么技术等,也在网上百度了好多,计划使用SpringBoot + Mybatis + thymeleaf  + LayUI + S ...

  10. 解决Windows对JDK默认版本切换问题

    注意修改path路径,或者修改控制面板下的java控制面板并不有效,原因是由于在WINDOWS\System32环境变量中的优先级高于JAVA_HOME设置的环境变量优先级,故如果只修改环境变量JAV ...