使用C#程序验证系统登录用户与目录权限

Windows用户类型:Administrator、Guest、自定义用户等;文件的权限不外乎:Read、Write、Modify、Remove等等,其中拥有所有权限的字符叫做FullControl。

C#当前程序用户路径权限验证

/// <summary>
  /// 是否拥有程序数据路径权限
  /// </summary>
  private static bool HasProgramDataRights=false;

  public static bool IsAdministrator()
  {
   System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
   System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
   return principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);
  }

  /// <summary>
  /// 读取系统程序数据路径权限&判断是否可以使用临时目录进行保存操作
  /// </summary>
  /// <param name="path"></param>
  public void ReadProgramDataRights(string path)
  {
   // 通过判定文件的权限来控制路径
   System.Security.AccessControl.DirectorySecurity dirSec = new System.IO.DirectoryInfo(path).GetAccessControl();
   System.Security.AccessControl.AuthorizationRuleCollection rules = dirSec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount));
   foreach (System.Security.AccessControl.FileSystemAccessRule rule in rules)
   {
    Console.WriteLine(path + "文件目录权限字符:" + rule.FileSystemRights);
    // 判定文件是否具有FullControl或Write权限
    if (rule.FileSystemRights.ToString().Equals("FullControl") || rule.FileSystemRights.ToString().Equals("Write"))
    {
     HasProgramDataRights = true;
     break;
    }
   }
   // 为IE保护模式创建临时保存路径
   if (HasProgramDataRights)
   {
    // 创建操作路径
    string recordTemp = FileHelp.GetAppDataLocalLow() + "\\CvNetVideo\\Record\\";
    string screenshotTemp = FileHelp.GetAppDataLocalLow() + "\\CvNetVideo\\Screenshot\\";
    string recordDst = FileHelp.GetCommonApplicationData() + "\\CvNetVideo\\Record\\";
    string screenshotDst = FileHelp.GetCommonApplicationData() + "\\CvNetVideo\\Screenshot\\";
    Directory.CreateDirectory(recordTemp);
    Directory.CreateDirectory(screenshotTemp);
    Directory.CreateDirectory(recordDst);
    Directory.CreateDirectory(screenshotDst);
   }
  }

C#文件操作工具类

public class FileHelp
 {
  public enum GetDirectoryType
  {
   ByAppDomain,
   ByAssembly
  }
  public static string GetCurrentDirectory(GetDirectoryType type = GetDirectoryType.ByAppDomain)
  {
   switch (type)
   {
    case GetDirectoryType.ByAppDomain:
     return AppDomain.CurrentDomain.BaseDirectory;
    case GetDirectoryType.ByAssembly:

     return Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
    default:
     return AppDomain.CurrentDomain.BaseDirectory;
   }
  }
  public static string GetCurrentDirectoryByAssembly()
  {
   return GetCurrentDirectory(GetDirectoryType.ByAssembly);
  }

  /// <summary>
  ///程序数据路径- C:\ProgramData
  /// </summary>
  /// <returns></returns>
  public static string GetCommonApplicationData()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
  }

  /// <summary>
  /// 用户数据路径
  /// </summary>
  /// <returns></returns>
  public static string GetApplicationData()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
  }

  /// <summary>
  /// 用户数据本地路径
  /// </summary>
  /// <returns></returns>
  public static string GetLocalApplicationData()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
  }

  /// <summary>
  /// 用户路径
  /// </summary>
  /// <returns></returns>
  public static string GetUserProfile()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
  }

  /// <summary>
  /// 用户的图片路径
  /// </summary>
  /// <returns></returns>
  public static string GetMyPictures()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.MyPictures);
  }

  /// <summary>
  /// 用户的视频路径
  /// </summary>
  /// <returns></returns>
  public static string GetMyVideos()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.MyVideos);
  }

  /// <summary>
  /// 用户的文档路径
  /// </summary>
  /// <returns></returns>
  public static string GetMyDocuments()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
  }

  /// <summary>
  /// IE保护模式下的低权限操作路径(Temporary Internet Files/Low)
  /// </summary>
  /// <returns></returns>
  public static string GetTemporaryInternetFiles()
  {
   return GetLocalApplicationData()+ "\\Microsoft\\Windows\\Temporary Internet Files\\Low";
  }
  /// <summary>
  /// IE保护模式下的低权限操作路径(%userprofile%/AppData/LocalLow)
  /// </summary>
  /// <returns></returns>
  public static string GetAppDataLocalLow()
  {
   return GetUserProfile() + "\\AppData\\LocalLow";
  }

  /// <summary>
  /// 获取系统字体文件路径
  /// </summary>
  /// <returns></returns>
  public static string GetFonts()
  {
   return Environment.GetFolderPath(Environment.SpecialFolder.Fonts);
  }
  /// <summary>
  /// 二进制文件读取
  /// </summary>
  /// <param name="FileUrl">文件路径</param>
  /// <returns></returns>
  public static byte[] BinaryRead(string FileUrl)
  {
   List<byte> lst = new List<byte>();
   try
   {
    //文件路径
    String filename = FileUrl;
    //打开文件
    FileStream FStream;
    if (File.Exists(filename))
    {
     FStream = new FileStream(filename, FileMode.Open);
    }
    else
    {
     return null;
    }
    int BufferSize = 1048576; //每次读取的字节数 每次读取1MB
    byte[] Buffer = new byte[BufferSize];
    long FileLength = FStream.Length;//文件流的长度
    int ReadCount = (int)(FileLength / BufferSize) + 1; //需要对文件读取的次数
                 //数据读取
    BinaryReader BWrite = new BinaryReader(FStream);
    //br.BaseStream.Seek(0, SeekOrigin.Begin);
    //while (br.BaseStream.Position < br.BaseStream.Length){}
    for (int a = 0; a < ReadCount; a++)
    {
     Buffer = BWrite.ReadBytes(BufferSize);
     lst.AddRange(Buffer);
    }
    BWrite.Close();
    BWrite.Close();
    return lst.ToArray();
   }
   catch (System.Exception ex)
   {
    Log.WriteLog4Ex("FileHelp.BinaryRead", ex);
    return null;
   }
  }
  /// <summary>
  /// 二进制文件写入
  /// </summary>
  /// <param name="Bts"></param>
  /// <param name="DirectoryUrl">文件目录路径</param>
  /// <param name="FileName">文件名称</param>
  /// <returns></returns>
  public static bool BinaryWrite(byte[] Bts, string DirectoryUrl, string FileName)
  {
   try
   {
    //文件路径
    string Filepath = DirectoryUrl + "\\" + FileName;
    //目录创建
    if (!Directory.Exists(DirectoryUrl))
     Directory.CreateDirectory(DirectoryUrl);
    //文件创建
    FileStream FStream;
    if (File.Exists(Filepath))
    {
     FStream = new FileStream(Filepath, FileMode.Append);
    }
    else
    {
     FStream = new FileStream(Filepath, FileMode.Create);
    }
    //数据写入
    BinaryWriter BWrite = new BinaryWriter(FStream);
    BWrite.Write(Bts);
    BWrite.Close();
    FStream.Close();
    return true;
   }
   catch (System.Exception ex)
   {
    Log.WriteLog4Ex("FileHelp.BinaryWrite", ex);
    return false;
   }
  }
  /// <summary>
  /// 二进制文件删除
  /// </summary>
  /// <param name="FileUrl">文件路径</param>
  public static void FileDelete(string FileUrl)
  {
   try
   {
    //文件路径
    String filename = FileUrl;
    //删除文件
    if (File.Exists(filename))
    {
     File.Delete(filename);
    }
   }
   catch (System.Exception ex)
   {
    Log.WriteLog4Ex("FileHelp.FileDelete", ex);
   }
  }
 }

注:如果您是开发OCX遇到路径问题请使用工具类中IE保护模式下的低权限路径。

补充知识:C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限

写在前面

在windows系统中,c盘中的目录权限比较高,有时制作安装包的时候,默认的安装路径就是在c盘,但对运行可执行文件,有时候需要为其添加完全控制权限,或者读写权限。这里将当时的解决方案记录一下。

代码实现

在C盘添加一个文件夹,并在文件夹内部,新建一个文本文件,如图所示:

该文件夹下,新建一个文本文件,如图所示:

为文件添加完全控制权限:

/// <summary>
  /// 为文件添加users,everyone用户组的完全控制权限
  /// </summary>
  /// <param name="filePath"></param>
  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>
  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);
  }

总结

在操作文件的时候,还是比较简单的,不过文件夹就比较复杂了,牵扯到是否要继承的问题。

以上这篇使用C#程序验证系统登录用户与目录权限就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C#判断程序是否是管理员权限运行的方法代码示例

    public bool IsAdministrator() { WindowsIdentity current = WindowsIdentity.GetCurrent(); WindowsPrincipal windowsPrincipal = new WindowsPrincipal(current); return windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator); }

  • C#设置文件权限的方法

    在开发中,我们经常会使用IO操作,例如创建,删除文件等操作.在项目中这样的需求也较多,我们也会经常对这些操作进行编码,但是对文件的权限进行设置,这样的操作可能会手动操作,现在介绍一种采用代码动态对文件设置权限的操作. 在对文件进行权限设置在DOtNet中,会采用FileSystemAccessRule类进行文件的权限操作. 1.现在看一下FileSystemAccessRule的实现代码: public FileSystemAccessRule( IdentityReference identi

  • C# 使用相同权限调用 cmd 传入命令的方法

    本文告诉大家如何使用相同权限调用cmd并且传入命令. 如果想要用相同的权限运行一个程序,可以使用 ProcessStartInfo 的方法 var processStartInfo = new ProcessStartInfo() { Verb = "runas", // 如果程序是管理员权限,那么运行 cmd 也是管理员权限 FileName = "cmd.exe", }; 只需要设置 Verb = "runas" 就可以使用相同的权限运行程序

  • c#通过进程调用cmd判断登录用户权限代码分享

    复制代码 代码如下: /// <summary>/// 应用程序的主入口点./// </summary>[STAThread]static void Main(){ if (RunCmd("net localgroup administrators").IndexOf(System.Environment.UserName) >= 0)    { //顺利执行.    }    else    {        //报错提示系统不是管理员用户登录,容易导致

  • 采用C#代码动态设置文件权限

    在开发中,我们经常会使用IO操作,例如创建,删除文件等操作.在项目中这样的需求也较多,我们也会经常对这些操作进行编码,但是对文件的权限进行设置,这样的操作可能会手动操作,现在介绍一种采用代码动态对文件设置权限的操作. 在对文件进行权限设置在DOtNet中,会采用FileSystemAccessRule类进行文件的权限操作. 1.现在看一下FileSystemAccessRule的实现代码: public FileSystemAccessRule( IdentityReference identi

  • 使用C#程序验证系统登录用户与目录权限

    Windows用户类型:Administrator.Guest.自定义用户等:文件的权限不外乎:Read.Write.Modify.Remove等等,其中拥有所有权限的字符叫做FullControl. C#当前程序用户路径权限验证 /// <summary> /// 是否拥有程序数据路径权限 /// </summary> private static bool HasProgramDataRights=false; public static bool IsAdministrato

  • 用Net User命令恢复系统登陆用户密码

    如果你安装的是Windows XP操作系统,不慎忘记了系统登录用户"*****"的密码,你可以NET命令来解决问题: Windows XP中提供了"net user"命令,该命令可以添加.修改用户账户信息,其语法格式为:   net user [UserName [Password | *] [options]] [/domain] net user [UserName {Password | *} /add [options] [/domain] net user

  • 详解Linux系统中设置SFTP服务用户目录权限的方法

    前言 在工作或者学习的时候,我们常常会遇到这样的需求,限制一个Linux用户,让他只能在指定的目录下进行添加.修改.删除操作,并且只能使用sftp登录服务器,不能用ssh操作.这些可以通过配置sftp服务实现. 方法如下 提供sftp服务的有vsftpd和internal-sftp,这里用的是系统自带的internal-sftp,操作步骤如下: 1.创建新用户ui,禁止ssh登录,不创建家目录 useradd -s /sbin/nologin -M www 2.设置用户密码 passwd www

  • vsftp建立虚拟用户不同目录分配不同权限操作步骤详解

    vsftpd服务器同时支持匿名用户.本地用户和虚拟用户三类用户账号,使用虚拟用户账号可以提供集中管理的FTP根目录,方便了管理员的管理,同时将用于FTP登录的用户名.密码与系统用户账号区别开,进一步增强了FTP服务器的安全性. 1.在/etc/vsftpd/vsftpd.conf加入或者更改以下配置语句: 复制代码 代码如下: anonymous_enable=NO (当然你也可以设成YES,同时允许匿名用户登陆)local_enable=YES (必须置YES,因为虚拟用户是映射到virtua

  • linux系统下用户管理相关介绍

    目录 一.用户及用户组存在的意义 1)用户存在的意义 2)用户组存在的意义 二.用户及用户组在系统中存在的方式 三.用户涉及到的系统配置文件 /etc/shadow        用户认证信息文件 四.用户相关操作 1)用户和用户组建立及删除 2)用户和用户组的信息管理 五.用户权力下放 六.文件权限查看和读取 一.用户及用户组存在的意义 1)用户存在的意义 系统的资源是有限的,如何合理分配系统资源? 1.身份 account 2.授权 author 3.认证 auth 以上3个 'a' 称为3

  • 实战分布式医疗挂号系统登录接口整合阿里云短信详情

    目录 步骤1:搭建service-user用户模块 1.启动类&配置网关 步骤2:整合JWT 步骤3: 搭建service-msm短信模块(整合阿里云短信) 1.启动类&配置网关 4.三层调用 步骤4:登录页面前端 1.封装api请求 2.添加登录组件 3.登录全局事件 附加:用户认证与网关整合 1.在服务网关添加fillter 2.调整前端代码 本篇文章完成的需求: 1,登录采取弹出层的形式. 2,登录方式: (1)手机号码+手机验证码 (2)微信扫描(后文完成) 3,无注册界面,第一次

  • Java中SSM+Shiro系统登录验证码的实现方法

     先给大家展示下效果图: 1.验证码生成类: import java.util.Random; import java.awt.image.BufferedImage; import java.awt.Graphics; import java.awt.Font; import java.awt.Color; /** * 验证码生成器类,可生成数字.大写.小写字母及三者混合类型的验证码. 支持自定义验证码字符数量: 支持自定义验证码图片的大小: 支持自定义需排除的特殊字符: * 支持自定义干扰线

  • 防止未登录用户操作—基于struts2拦截器的简单实现

    一般,我们的web应用都是只有在用户登录之后才允许操作的,也就是说我们不允许非登录认证的用户直接访问某些页面或功能菜单项.我还记得很久以前我的做法:在某个jsp页面中查看session中是否有值(当然,在用户登录逻辑中会将用户名或者用户对象存入session中),如果session中用户信息为空,那么redirect 到登录页面.然后在除了登录页面外的其它所有需要验证用户已登录的页面引入这个jsp . 比如,我们将检查用户是否登录的代码放入一个jsp页面中,如 checkUser.jsp <%@

  • play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面

    一.编写SessionFilter.scala代码 package filters import javax.inject.{Inject, Singleton} import akka.stream.Materializer import controllers.routes import play.api.mvc.{Filter, RequestHeader, Result, Results} import scala.concurrent.Future @Singleton class S

  • 如何验证会员系统中用户的邮箱是否真实存在

    在开发网站时,我们需要对用户注册的邮箱进行核对与验证,用户填写的邮箱是否有效邮箱. 好吧,我们先从数据库入手,修改用户表让用户有填写email的字段,添加了2个字段: ALTER TABLE [dbo].[Users] ADD [Email] VARCHAR(100) NULL, [IsVerify] BIT NOT NULL DEFAULT(0) SELECT * FROM [dbo].[Users] 由于你需要做2个功能,一个是要求用户验证邮箱有效性,也有可以以邮箱来让用户修改用户密码.因此

随机推荐