c# 给文件/文件夹 管理用户权限

 public class PermissionManager
    {
        /// <summary>
        /// 为文件添加users,everyone用户组的完全控制权限
        /// </summary>
        /// <param name="filePath"></param>
        public static void AddSecurityControll2File(string filePath)
        {

            //获取文件信息
            FileInfo fileInfo = new FileInfo(filePath);
            //获得该文件的访问权限
            System.Security.AccessControl.FileSecurity fileSecurity = fileInfo.GetAccessControl();
            //添加ereryone用户组的访问权限规则 完全控制权限
            fileSecurity.AddAccessRule(new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow));
            //添加Users用户组的访问权限规则 完全控制权限
            fileSecurity.AddAccessRule(new FileSystemAccessRule("Users", FileSystemRights.FullControl, AccessControlType.Allow));
            //设置访问权限
            fileInfo.SetAccessControl(fileSecurity);
        }

        /// <summary>
        ///为文件夹添加users,everyone用户组的完全控制权限
        /// </summary>
        /// <param name="dirPath"></param>
        public static void AddSecurityControll2Folder(string dirPath)
        {
            //获取文件夹信息
            DirectoryInfo dir = new DirectoryInfo(dirPath);
            //获得该文件夹的所有访问权限
            System.Security.AccessControl.DirectorySecurity dirSecurity = dir.GetAccessControl(AccessControlSections.All);
            //设定文件ACL继承
            InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
            //添加ereryone用户组的访问权限规则 完全控制权限
            FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);
            //添加Users用户组的访问权限规则 完全控制权限
            FileSystemAccessRule usersFileSystemAccessRule = new FileSystemAccessRule("Users", FileSystemRights.FullControl, inherits, PropagationFlags.None, AccessControlType.Allow);
            bool isModified = false;
            dirSecurity.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out isModified);
            dirSecurity.ModifyAccessRule(AccessControlModification.Add, usersFileSystemAccessRule, out isModified);
            //设置访问权限
            dir.SetAccessControl(dirSecurity);
        }

        /// <summary>
        /// 为文件夹移除某个用户的权限
        /// </summary>
        /// <param name="dirName"></param>
        /// <param name="username"></param>
        static void removePermissions(string dirName, string username)
        {
            string user = System.Environment.UserDomainName + "\\" + username;
            DirectoryInfo dirinfo = new DirectoryInfo(dirName);
            DirectorySecurity dsec = dirinfo.GetAccessControl(AccessControlSections.All);

            AuthorizationRuleCollection rules = dsec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
            foreach (AccessRule rule in rules)
            {
                if (rule.IdentityReference.Value == user)
                {
                    bool value;
                    dsec.PurgeAccessRules(rule.IdentityReference);
                    dsec.ModifyAccessRule(AccessControlModification.RemoveAll, rule, out value);
                }
            }
        }

        /// <summary>
        /// 项目中用,文件夹只保留everyone权限,其中允许用户读,但不允许写
        /// by the way,代码结果是给文件夹一个特殊权限,点进去高级看,会发现这个特殊权限的子项和写入权限的子项是一样的
        /// </summary>
        /// <param name="dirName"></param>
        public static void OnlyKeepEveryonePermissionsWithWriteNotAllowed(string dirName)
        {
            DirectoryInfo dirinfo = new DirectoryInfo(dirName);
            DirectorySecurity objSecObj = dirinfo.GetAccessControl();
            AuthorizationRuleCollection acl = objSecObj.GetAccessRules(true, true,
                                                        typeof(System.Security.Principal.NTAccount));
            objSecObj.SetAccessRuleProtection(true, false); //to remove inherited permissions
            foreach (FileSystemAccessRule ace in acl) //to remove any other permission
            {
                objSecObj.PurgeAccessRules(ace.IdentityReference);  //same as use objSecObj.RemoveAccessRuleSpecific(ace);
            }
            InheritanceFlags inherits = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;
            FileSystemAccessRule everyoneFileSystemAccessRule = new FileSystemAccessRule("Everyone", FileSystemRights.ReadAndExecute | FileSystemRights.ListDirectory | FileSystemRights.Read, inherits, PropagationFlags.None, AccessControlType.Allow);
            FileSystemAccessRule everyoneFileSystemAccessRule2 = new FileSystemAccessRule("Everyone", FileSystemRights.Write, AccessControlType.Deny);
            bool isModified = false;
            objSecObj.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule2, out isModified);
            objSecObj.ModifyAccessRule(AccessControlModification.Add, everyoneFileSystemAccessRule, out isModified);
            dirinfo.SetAccessControl(objSecObj);
        }
    }

写入:

代码生成的特殊权限

其实权限是一样的

原文地址:https://www.cnblogs.com/swobble/p/11198765.html

时间: 2024-08-26 10:01:57

c# 给文件/文件夹 管理用户权限的相关文章

linux中如何修改文件夹的用户权限 chown命令

linux中,可以使用chown命令来修改文件夹的用户权限. 1.  以普通用户 A 登录linux,利用su -切换到root用户 2. 在root用户下,可以看到文件夹内容 3. 但通过文件系统,却无法打开 git 文件夹 提示无法显示远程文件夹(应该是权限不够) 这是因为,以普通用户 A 在命令行内切换到root用户后,文件系统的权限还是普通用户的权限,此时就需要修改文件夹的用户权限. 4.切换到文件夹所在的目录,使用chown命令,即可修改权限.(如果文件夹内还包含文件夹,那可以对cho

文件夹和用户权限

添加新用户 useradd   用户名 设置密码 passwd 用户名 设置组 usermod -g 组名 用户名 删除用户名 userdel 用户名 添加组 groupadd 组名 删除组 groupdel 组名 查询组分类 cat /etc/group 查看本用户属于什么组 groups 修改文件权限 chmod 777 文件名 命令: chmod 777 scan_record.js 格式: chmod 权限数字 文件名 r 读权限read  4 w 写权限write 2 x 操作权限ex

给文件夹添加用户权限后,用户还是不能打开或修改子文件夹?

服务器环境:Windows Server 20003 R2 文件夹:a/b/c/d.txt :a/b/e:a/b/f: 问题描述:公司新员工需要查看服务器上的文件d.txt,并需要修改上面的文件.但是将文件夹a添加该用户可修改权限后.该用户还是不能修改文件,并且连文件夹c都进不去.提示没有权限!而且文件夹b下的e文件夹可以进,也可以修改.但是文件夹f也进不去,情况跟c的一样. 问题判断:1.先将文件夹c上其他用户权限与该用户的权限相比较.是否一致,判断是否是因为权限没加正确导致的.结果是一致的.

后台管理用户权限数据库设计

来自棱镜学院-在线IT教育www.prismcollege.com 1.     创建基本表 创建User.Role和Module三张表,User中每一行对应一个用户信息,Role每一行保存一个角色信息,包括角色id及对应的name,Module中的每一行保存一个模块信息,包括模块id及对应的name. 创建三张表的sql语句(MySql环境)如下: 1)创建user表,表结构如下: 2)创建role表,表结构如下: 3)创建module表,表结构如下: CREATE TABLE `of_use

权限管理用户权限挂靠到菜单上

原文地址:https://www.cnblogs.com/jintian/p/11255287.html

Linux系统用户权限管及目录、文件的管理(基础详解,操作演示,通俗易懂)

用户账号和组账号 Linux系统是基于用户身份对资源访问进行控制,Linux的用户账号分为以下三类: 超级用户:就是root用户,在所有用户中它拥有最大的权限 ,管理着普通用户,可以说你有了一台服务器的root权限,那这台服务器基本就是你的了. 普通用户: 一般用户,其使用系统的权限受限,可以使用root账户对其管理. 程序用户:也叫系统用户,保障系统运行的用户,一般不可人为登录系统. 常用的组账号一般分为两种: 基本组:也叫私有组,一般在创建账号时系统默认给每个账号都创建一个与自己同名的基本组

RHEL6基础四十九之RHEL文件(夹)权限进阶篇

ACL权限管理 ACL(Access Control List,访问控制列表)主要是提供传统的owner,group,others的read,write,execute权限之外的具体权限设置,ACL可以针对单一用户.单一文件或目录来进行r,w,x的权限控制,对于需要特殊权限的使用状况有一定帮助. 例①:目录 /home/acl 的权限为:drwxr-x---,所有者与所属组均为 root,在不改变所有者的前提下,只要求other组的用户justin 对该目录有完全访问权限 (rwx)(justi

Linux命令-----文件和目录管理

# cat /home/333   //查看/home下文件333的内容(不停顿) # cd  //进入当前帐户所在目录 # cd 配合通配符*会更方便些 # cd /home/ccc //进入/home/ccc目录 # cd -  //可以回到你之前所在的那个目录 # cd ../..  //返回上两级目录 cp [-adfilprsu] 源文件(source) 目标文件(destination) cp [options] source1 source2 source3 - directory

MySQL数据库8(十八)用户权限管理

用户权限管理 用户权限管理:在不同的项目中给不同的角色(开发者)不同的操作权限,为了保证数据库数据的安全 用户管理 Mysql需要客户端进行连接认证才能进行服务器操作,需要用户信息.Mysql中所有用户的信息都保存在mysql数据库下的user表中. 默认的,在安装mysql的时候,如果没有创建匿名用户,那么意味着所有的用户只有一个:root超级用户 PS:修改root用户密码: alter user'root'@'localhost' identified by '新密码'; 在mysql中,