精华内容
下载资源
问答
  • 权限管理程序

    2016-04-20 15:46:29
    思路:如果该角色有管理员,则不能删除, 在删除角色时,要删除角色与权限的中间表里面的数据 使用到钩子函数, 把判断该角色是否有管理员,则写的钩子函数里面(_before_delete) (3)添加一个钩子函数(_after...

    2、角色删除

    思路:如果该角色有管理员,则不能删除,

    在删除角色时,要删除角色与权限的中间表里面的数据

    使用到钩子函数,

    把判断该角色是否有管理员,则写的钩子函数里面(_before_delete)


    (1)在角色列表中添加一个删除角色的链接。

    (2)在角色的控制器里面,添加一个删除角色的方法,(del)

    (3)添加一个钩子函数(_after_delete())删除角色与权限中间表里面的内容。


    //钩子函数,用于删除角色和权限的中间表里面的关联的数据

    protected  function _after_delete($data,$option)

    {

    $id = $options['where']['id'];

    if(M('RolePrivilege')->where("role_id = $id"))->delete()===false){

          //执行失败

         $this -> error = "删除失败";

         return false;

       }

    }

    展开全文
  • MVC+EF框架+EasyUI实现权限管理 源码程序

    万次下载 热门讨论 2012-12-13 18:53:53
    MVC+EF框架+EasyUI实现权限管理是对权限的基本操作的操作,具体的可以参看我的博客http://www.cnblogs.com/hanyinglong/
  • 在Vista 和 Windows 7 及更新版本的操作系统中,运行程序默认都是普通用户权限,现在我因为要在程序中运行Windows服务注册卸载等操作,需要让程序打开自动以管理权限运行,否则每次都要右键菜单中选择以管理权限...

    在Vista 和 Windows 7 及更新版本的操作系统中,运行程序默认都是普通用户权限,现在我因为要在程序中运行Windows服务注册卸载等操作,需要让程序打开自动以管理员权限运行,否则每次都要右键菜单中选择以管理员权限运行会很麻烦。网上查了一下,有三种方法:

    方法一:通过添加应用程序清单文件

    方法二:通过 System.Diagnostics.Process.Start() 方式启动

    方法三:直接修改程序文件的属性

    其中,方法一我实现了,觉得挺好的,程序中就能实现。重点介绍。方法二我没有实现成功。方法三有些麻烦,需要用户去设置。

     

    方法一:通过添加应用程序清单文件:

    在 项目 上 添加新项 选择“应用程序清单文件” 然后单击“ 添加” 按钮

    添加后,默认打开app.manifest文件,将:

    <requestedExecutionLevel  level="asInvoker" uiAccess="false" />

    修改为:

    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

    然后打开 项目属性 ,将 应用程序 标签页中的 资源 中的 清单 修改为新建的 app.manifest。

    注:我的项目中添加了app.manifest后资源中清单自动就变成app.manifest了)

    重新生成项目,再次打开程序时就会提示 需要以管理员权限运行。

    注意:重新生成项目才行。然后到程序目录中直接打开程序就具有管理员权限了。我的电脑都没提示以管理员权限运行,但确认已经具有管理员权限了。

    需要注意的是:我在VS中启动调试,没有获得管理员权限。网上说,如果在VS中 启动调试 的话,就会提示 此任务要求应用程序具有提升的权限。如下图:

    提升权限

    选择 使用其他凭据重新启动 即可。

    再介绍后两种方法:(虽然我觉得不大好)

    方法二:通过 System.Diagnostics.Process.Start() 方式启动:

    实现方法: 修改默认生成的Program文件,修改后的代码如下:

    由于已经在代码上做了注释,所以不再详细说明;

    复制代码

     1     static class Program
     2     {
     3         [STAThread]
     4         static void Main()
     5         {            
     6             Application.EnableVisualStyles();
     7             Application.SetCompatibleTextRenderingDefault(false);
     8 
     9             /**
    10              * 当前用户是管理员的时候,直接启动应用程序
    11              * 如果不是管理员,则使用启动对象启动程序,以确保使用管理员身份运行
    12              */
    13             //获得当前登录的Windows用户标示
    14             System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
    15             System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);
    16             //判断当前登录用户是否为管理员
    17             if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator))
    18             {
    19                 //如果是管理员,则直接运行
    20                 Application.Run(new Form1());
    21             }
    22             else
    23             {
    24                 //创建启动对象
    25                 System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
    26                 startInfo.UseShellExecute = true;
    27                 startInfo.WorkingDirectory = Environment.CurrentDirectory;
    28                 startInfo.FileName = Application.ExecutablePath;
    29                 //设置启动动作,确保以管理员身份运行
    30                 startInfo.Verb = "runas";
    31                 try
    32                 {
    33                     System.Diagnostics.Process.Start(startInfo);
    34                 }
    35                 catch
    36                 {
    37                     return;
    38                 }
    39                 //退出
    40                 Application.Exit();
    41             }
    42         }
    43     }

    复制代码

    效果:由于是通过System.Diagnostics.Process.Start() 方式外部调用启动,所以直接通过VS运行时,是不会提示VS也需要管理员权限,只有程序本身需要管理员权限,与生成应用程序的程序不同。这点是和方法二实现的主要不同之处。

    方法三:直接修改程序文件的属性

    右击程序文件,在弹出的属性对话框中的 兼容性 标签页中

    勾选“以管理员身份运行此程序”即可。

     设置权限等级

    判断程序是否以管理员身份运行

     需要添加命名空间:

    using System.Security.Principal;

    复制代码

        /// <summary>
        /// 确定当前主体是否属于具有指定 Administrator 的 Windows 用户组
        /// </summary>
        /// <returns>如果当前主体是指定的 Administrator 用户组的成员,则为 true;否则为 false。</returns>
        public static bool IsAdministrator()
        {
            bool result;
            try
            {
                WindowsIdentity identity = WindowsIdentity.GetCurrent();
                WindowsPrincipal principal = new WindowsPrincipal(identity);
                result = principal.IsInRole(WindowsBuiltInRole.Administrator);
    
                //http://www.cnblogs.com/Interkey/p/RunAsAdmin.html
                //AppDomain domain = Thread.GetDomain();
                //domain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
                //WindowsPrincipal windowsPrincipal = (WindowsPrincipal)Thread.CurrentPrincipal;
                //result = windowsPrincipal.IsInRole(WindowsBuiltInRole.Administrator);
            }
            catch
            {
                result = false;
            }
            return result;
        }

    很多东西借鉴自https://www.cnblogs.com/Interkey/p/RunAsAdmin.html,感谢作者。

    展开全文
  • 工作中碰到这样的需求,A程序需要管理权限(也就是会弹UAC验证),B程序不需要,现在B程序是通过A程序CreateProcess启动的,发现其实B程序继承了A的权限,解决方法如下: DWORD GetProcessIL(DWORD u32_PID, ...

    工作中碰到这样的需求,A程序需要管理员权限(也就是会弹UAC验证),B程序不需要,现在B程序是通过A程序CreateProcess启动的,发现其实B程序继承了A的权限,解决方法如下:

     

    DWORD GetProcessIL(DWORD u32_PID, DWORD* pu32_ProcessIL)
    {
    	*pu32_ProcessIL = 0;
    
    	HANDLE h_Process   = 0;
    	HANDLE h_Token     = 0;
    	DWORD  u32_Size    = 0;
    	BYTE*  pu8_Count   = 0;
    	DWORD* pu32_ProcIL = 0;
    	TOKEN_MANDATORY_LABEL* pk_Label = 0;
    
    	h_Process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, u32_PID);
    	if (!h_Process)
    		goto _CleanUp;
    
    	if (!OpenProcessToken(h_Process, TOKEN_QUERY, &h_Token))
    		goto _CleanUp;
    
    	if (!GetTokenInformation(h_Token, TokenIntegrityLevel, NULL, 0, &u32_Size) &&
    		GetLastError() != ERROR_INSUFFICIENT_BUFFER)
    		goto _CleanUp;
    
    	pk_Label = (TOKEN_MANDATORY_LABEL*) HeapAlloc(GetProcessHeap(), 0, u32_Size);
    	if (!pk_Label)
    		goto _CleanUp;
    
    	if (!GetTokenInformation(h_Token, TokenIntegrityLevel, pk_Label, u32_Size, &u32_Size))
    		goto _CleanUp;
    
    	pu8_Count = GetSidSubAuthorityCount(pk_Label->Label.Sid);
    	if (!pu8_Count)
    		goto _CleanUp;
    
    	pu32_ProcIL = GetSidSubAuthority(pk_Label->Label.Sid, *pu8_Count-1);
    	if (!pu32_ProcIL)
    		goto _CleanUp;
    
    	*pu32_ProcessIL = *pu32_ProcIL;
    	SetLastError(ERROR_SUCCESS);
    
    _CleanUp:
    	DWORD u32_Error = GetLastError();
    	if (pk_Label)  HeapFree(GetProcessHeap(), 0, pk_Label);
    	if (h_Token)   CloseHandle(h_Token);
    	if (h_Process) CloseHandle(h_Process);
    	return u32_Error;
    }

     

    DWORD CreateProcessMediumIL(WCHAR* u16_Path, WCHAR* u16_CmdLine, WCHAR* u16_CurrentDirectory, PROCESS_INFORMATION *pProcessInfo)
    {
    	HANDLE h_Process = 0;
    	HANDLE h_Token   = 0;
    	HANDLE h_Token2  = 0;
    	PROCESS_INFORMATION k_ProcInfo    = {0};
    	STARTUPINFOW        k_StartupInfo = {0};
    
    	BOOL b_UseToken = FALSE;
    
    	// Detect Windows Vista, 2008, Windows 7 and higher
    	if (GetProcAddress(GetModuleHandleA("Kernel32"), "GetProductInfo"))
    	{
    		DWORD u32_CurIL;
    		DWORD u32_Err = GetProcessIL(GetCurrentProcessId(), &u32_CurIL);
    		if (u32_Err)
    			return u32_Err;
    
    		if (u32_CurIL > SECURITY_MANDATORY_MEDIUM_RID)
    			b_UseToken = TRUE;
    	}
    
    	// Create the process normally (before Windows Vista or if current process runs with a medium IL)
    	if (!b_UseToken)
    	{
    		if (!::CreateProcessW(u16_Path, u16_CmdLine, 0, 0, FALSE, 0, 0, u16_CurrentDirectory, &k_StartupInfo, &k_ProcInfo))
    		{
    			return GetLastError();
    		}
    
    		if(pProcessInfo)
    		{
    			*pProcessInfo = k_ProcInfo;
    		}
    		else
    		{
    			CloseHandle(k_ProcInfo.hThread);
    			CloseHandle(k_ProcInfo.hProcess); 
    		}
    
    		return ERROR_SUCCESS;
    	}
    
    	defCreateProcessWithTokenW f_CreateProcessWithTokenW = 
    		(defCreateProcessWithTokenW) GetProcAddress(GetModuleHandleA("Advapi32"), "CreateProcessWithTokenW");
    
    	if (!f_CreateProcessWithTokenW) // This will never happen on Vista!
    		return ERROR_INVALID_FUNCTION; 
    
    	HWND h_Progman = ::GetShellWindow();
    
    	DWORD u32_ExplorerPID = 0;		
    	GetWindowThreadProcessId(h_Progman, &u32_ExplorerPID);
    
    	// ATTENTION:
    	// If UAC is turned OFF all processes run with SECURITY_MANDATORY_HIGH_RID, also Explorer!
    	// But this does not matter because to start the new process without UAC no elevation is required.
    	h_Process = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, u32_ExplorerPID);
    	if (!h_Process)
    		goto _CleanUp;
    
    	if (!OpenProcessToken(h_Process, TOKEN_DUPLICATE, &h_Token))
    		goto _CleanUp;
    
    	if (!DuplicateTokenEx(h_Token, TOKEN_ALL_ACCESS, 0, SecurityImpersonation, TokenPrimary, &h_Token2))
    		goto _CleanUp;
    
    	if (!f_CreateProcessWithTokenW(h_Token2, 0, u16_Path, u16_CmdLine, 0, 0, u16_CurrentDirectory, &k_StartupInfo, &k_ProcInfo))
    	{
    		goto _CleanUp;
    	}
    
    	if(pProcessInfo)
    		*pProcessInfo = k_ProcInfo;
    
    	SetLastError(ERROR_SUCCESS);
    
    _CleanUp:
    	DWORD u32_Error = GetLastError();
    	if (h_Token)   CloseHandle(h_Token);
    	if (h_Token2)  CloseHandle(h_Token2);
    	if (h_Process) CloseHandle(h_Process);
    
    	if(!pProcessInfo)
    	{
    		CloseHandle(k_ProcInfo.hThread);
    		CloseHandle(k_ProcInfo.hProcess); 
    	}
    
    	return u32_Error;
    }

    用法和CreateProcess一样,可以自己扩展一下

     

     


     

    展开全文
  • C++ windows管理权限运行程序

    千次阅读 2019-05-05 15:02:44
    我们已用户权限运行程序,有时候需要在指定的路径下修改文件,而因为没有管理权限导致失败。此时,我们可以使用管理权限运行一个新的进程,用这个新的进程来执行修改任务。 判断是否具有管理权限 //判断...

    我们已用户权限运行程序,有时候需要在指定的路径下修改文件,而因为没有管理员权限导致失败。此时,我们可以使用管理员权限运行一个新的进程,用这个新的进程来执行修改任务。

     判断是否具有管理员权限

    //判断管理员权限
    bool IsAdmin()
    {
    	BOOL b;
    	SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY;
    	PSID AdministratorsGroup;
    	b = AllocateAndInitializeSid(&NtAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &AdministratorsGroup);
    	if (b)
    	{
    		if (!CheckTokenMembership(NULL, AdministratorsGroup, &b))
    		{
    			b = FALSE;
    		}
    		FreeSid(AdministratorsGroup);
    	}
    
    	return(b);
    }

     判断系统版本是否是win7以上

    bool IsAboveVistaVersion()  //判断系统版本是否是win7以上
    {
    	OSVERSIONINFOEX WinVersion;
    	ZeroMemory(&WinVersion, sizeof(OSVERSIONINFOEX));
    	WinVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    	BOOL flag = (BOOL)GetVersionEx((OSVERSIONINFO *)&WinVersion);
    	assert(flag);
    
    	if (WinVersion.dwMajorVersion < 6)
    		return false;
    
    	if (WinVersion.dwMajorVersion == 6 && WinVersion.dwMinorVersion == 1)
    		return false;
    
    	if (WinVersion.dwMajorVersion == 6 && WinVersion.dwMinorVersion >= 2)
    		return true;
    
    	if (WinVersion.dwMajorVersion > 6)
    		return true;
    
    	return true;
    }

    以管理员运行程序:

    wstring GetExePath()
    {
    	WCHAR buf[MAX_PATH] = { 0 };
    	wstring strPath;
    	GetModuleFileName(nullptr, buf, MAX_PATH);
    	strPath = buf;
    	return strPath;
    }
    //是否初次运行
    bool IsFirstRun(string sFileName, string sAppName, string sKeyName)
    {
    	bool bRet = false;
    	char cModulePath[MAX_PATH] = { 0 };
    	GetModuleFileNameA(NULL, cModulePath, MAX_PATH);
    	PathRemoveFileSpecA(cModulePath);
    
    	string strPath = cModulePath;
    	strPath += "\\" + sFileName;
    
    	int nIndex = GetPrivateProfileIntA(sAppName.c_str(), sKeyName.c_str(), 0, strPath.c_str());
    	if (nIndex == 0)
    	{
    		bRet = true;
    		WritePrivateProfileStringA(sAppName.c_str(), sKeyName.c_str(), "1", strPath.c_str());
    	}
    	if (!IsAdmin() && IsAboveVistaVersion())
    	{
    		wstring exePath(GetExePath());
    		SHELLEXECUTEINFO sei = { sizeof(SHELLEXECUTEINFO) };
    		sei.fMask = SEE_MASK_NOCLOSEPROCESS;
    		sei.lpVerb = L"runas";
    		sei.lpFile = exePath.c_str();
    		sei.lpParameters = L"FirstRun";
    		if (!ShellExecuteEx(&sei))
    		{
    			DWORD dwStatus = GetLastError();
    			if (dwStatus == ERROR_CANCELLED)
    			{
    				//debug_showmessage("提升权限出错\n");
    			}
    		}
    	}
    
    	return bRet;
    }

    此时使用管理员权限开启一个进程,并带有一个参数“FirstRun”

    wstring strCmd = szArglist[1];
    if (strCmd == L"FirstRun")//第一次运行时调用
    		{
    			SetFirstRun("set.ini","Install","FirstRun");
    			return 0;
    		}

    在该进程main函数中,判断参数是否为“FirstRun”,如果是则执行需要管理员权限的代码

    展开全文
  • Android应用程序权限管理

    千次阅读 2018-06-22 16:17:04
    在Android源码frameworks/base/api/current.txt中定义了所有应用程序所需的权限https://blog.csdn.net/gjy_it/article/details/52606298访问登记属性android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记...
  • C# 设置管理权限运行程序

    千次阅读 2019-03-25 18:21:32
    在运行C#桌面程序的时候发现,当其安装在D盘的时候能够正常运行,但是装在C盘的时候就无法运行了,经过调试发现是缺少权限造成的,如何添加程序启动管理权限? 在VS中,项目右键→属性→安全性→勾选“启用...
  • 在 Windows 系统中,管理权限和非管理权限运行的程序之间不能使用 Windows 提供的通信机制进行通信。对于部分文件夹(ProgramData),管理权限创建的文件是不能以非管理权限修改和删除的。 然而,一个进程...
  • VS如何设置程序权限管理权限

    千次阅读 2019-09-30 15:59:40
    有时候程序是需要管理权限才能做一些操作,比如对C盘进行读写(日志),设置程序开机自启动等,没有管理权限可能会无法对C盘进行读写(日志)或者无法设置程序开机自启动等。 解决办法: 右键项目,属性–>...
  • VB程序使用管理权限

    千次阅读 2016-02-07 11:28:08
    另外,如果你用vc2008以上开发程序,可以在工程里选择uac,在生成的程序里,如果点击运行程序会弹出需要管理权限运行程序的窗口。 现在可以通过把manifest嵌入普通程序里来达到这个效果。 现在说一下怎么样给一...
  • 程序权限不够,应用管理权限打开程序运行方可。 如何使vc程序运行时请求管理权限? 直接项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator 重新编译 这样你的程序直接运行就拥有...
  • win10系统部分程序需要使用管理权限运行,比如需要操作系统盘内的ProgramData文件、修改注册表HKEY_LOCAL_MACHINE下的键值等等,下面介绍几种可以以管理权限运行的方法。 本文内容 方法一:在软件开发生成程序...
  • 很多时候,我们需要程序获得管理权限,以便进行一些需要更高权限的操作(比如修改Program Files里面的文件、系统操作等)。相信已经有不少人已经知道在项目设置里面要求程序必须以管理员身份启动,但有些功能还是...
  • Win8 管理权限卸载程序

    千次阅读 2015-04-20 10:50:10
    二、文件->"运行新任务",打开新建任务窗口,录入”explorer.exe“并勾选”以系统管理权限创建此任务“,然后点击”确定“。 三、按平常操作卸载程序即可(否则会存在卸载失败提示2503等错误的情况出现)
  • ms升级了之后,有些时候程序无法操作系统盘的内容,因为权限不够...以下代码是表示如何获得管理权限运行程序。 static void Main(string[] Args) { /** * 当前用户是管理员的时候,直接启动应用程序
  • Windows 如何以管理权限启动程序

    千次阅读 2017-05-27 20:10:34
    如何让程序运行时,以管理权限运行? 即:在程序运行时弹出UAC提升权限对话框。 方法一: 属性 --> 链接器 --> 清单文件 --> UAC执行级别 --> requireAdministrator 方法二: 清单文件:建立如 app....
  • 通过 System.Diagnostics.Process.Start() 方式启动 实现方法: 修改默认生成的Program文件,修改后的代码如下: ... * 当前用户是管理员的时候,直接启动应用程序 * 如果不是管理员,则使用启动对象启动程
  • 程序申请管理权限

    千次阅读 2016-01-22 09:51:25
    windows 为程序申请管理权限方法一:ShellExecuteEx, 头文件windows.h 依赖库Shell32.dll此方法在程序中,为调用的外部程序申请管理权限 QByteArray appNameByte = appName.toUtf8(); QByteArray dirByte = ...
  • 有时候程序是需要管理权限才能做一些操作,比如对C盘进行读写(日志),没有管理权限就什么也做不了。 解决办法: 右键项目,属性–&gt;链接器–&gt;清单文件–&gt;UAC执行级别–&gt;...
  • 制作好的程序没有管理权限,啥也干不了? 以下是一个可以达到在程序开始运行之前申请管理权限 UAC.zip 感谢支持!
  • VC++程序提升管理权限

    千次阅读 2013-09-02 14:04:21
    程序权限不够,应用管理权限打开程序运行方可。 如何使vc程序运行时请求管理权限? 如果是2005或者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator 重新...
  • 程序如何以管理员身份运行程序   最近在项目运行过程中遇到了一个问题,就是打开程序的过程中,软件会出现打开数据库是一个只读数据库,我们需要将客户端设置为以管理员身份运行才能解决这种问题。这样虽然可以...
  • VC中程序提升管理权限

    千次阅读 2016-08-31 10:44:39
    程序权限不够,应用管理权限打开程序运行方可。 如何使vc程序运行时请求管理权限? 如果是2005或者2008 就简单了,直接项目右键---属性---连接器---清单文件---uac执行级别 选择requireAdministrator 重新...
  • Windows的客户端管理经常会遇见一个场景,用户需要升级某个软件,但是需要管理权限,如果是那些没有通过组策略或者SCCM发布的程序,那么桌面支持需要亲自跑过去,输入管理员用户和密码提升权限进行操作。...
  • Qt程序添加管理权限

    千次阅读 2017-04-07 15:41:49
    Qt程序添加管理权限:之前用到,所以做一下记录。 在.pro文件中添加如下代码: QMAKE_LFLAGS += /MANIFESTUAC:"level='requireAdministrator'uiAccess='false'
  • C#程序管理权限运行

    千次阅读 2018-12-10 16:25:28
    C#程序管理权限运行 在Vista 和 Windows 7 及更新版本的操作系统,增加了 UAC(用户账户控制) 的安全机制,如果 UAC 被打开,用户即使以管理权限登录,其应用程序默认情况下也无法对系统目录、系统注册表等可能...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,453
精华内容 8,981
关键字:

权限管理程序