我期待这段代码:
WindowsPrincipal principal = new WindowsPrincipal( WindowsIdentity.GetCurrent() );
public bool UserHasAdminRights( WindowsPrincipal principal, WindowsBuiltInRole role )
{
bool isAdmin;
// get the role information of the current user
if ( principal.IsInRole( role ) )
{
isAdmin = true;
}
else
{
isAdmin = false;
}
return isAdmin;
}
当用户在内置管理员组中时,返回 true 。
无论其
IsInRole
州的MSDN:
在Windows Vista中,用户帐户控制(UAC)确定权限 用户如果您是内置管理员组的成员, 为您分配了两个运行时访问令牌:标准用户访问权限 令牌和管理员访问令牌。默认情况下,您在 标准用户角色。当您尝试执行需要的任务时 管理权限,您可以动态提升您的角色 使用“同意”对话框。执行IsInRole的代码 方法不显示“同意”对话框。代码返回false 如果您是标准用户角色,即使您在内置 管理员组。您可以在提升之前提升您的权限 通过右键单击应用程序图标并指示来执行代码 您希望以管理员身份运行。
问题是如何修改此代码以使其返回true,如果用户位于内置Admin组中, WITHOUT 要求用户在运行时/之前提升权限?
答案 0 :(得分:3)
由于我不能在评论中整齐地发布代码,就像我可以在这里一样,让我建议一些伪代码
var user = Windows.GetThisUser( me ); //current method (I said pseudo code)
function CheckIfImAdmin( user ) .... //current method
建议的方法:
var administrativeUsers = Windows.GetUsersInRole( "admin" ); //use a SID here, much more reliable
foreach(user in administrativeUsers){
if (user == me) return true;
return false;
}
虽然这可能看起来一样,但事实并非如此。而不是查询用户以查看它当前是否处于给定角色(非升级不是),而是关注管理员 的人,然后询问该组是否包含我想要的用户,即当前用户。