我工作在ASP.NET MVC 5的Web API 2如何使用角色與集成Windows身份驗證
我已通過添加以下代碼來實現網絡集成Windows身份驗證實現的Web應用程序。 config:
<system.web>
<authentication mode="Windows" />
</system.web>
<system.webServer>
<security>
<authentication>
<windowsAuthentication enabled="true"/>
</authentication>
</security>
</system.webServer>
並在我的控制器上添加[Authorize]
註釋。
現在,我被要求根據用戶的角色提供一些功能。我有一張表,我擁有用戶權限,但我不知道如何創建這些角色,並將正確的權限與他們關聯。
任何幫助,將不勝感激。
在此先感謝
[更新]
基於梅森的回答,我已經更新了代碼位。
添加以下行的web.config:
<roleManager defaultProvider="MyRoleProvider">
<providers>
<add
name="MyRoleProvider"
type="MyApp.App_Start.MyRoleProvider"
applicationName="My Tool" />
</providers>
</roleManager>
MyRoleProvider.cs:
public class MyRoleProvider : RoleProvider
{
private MyEntities db = new MyEntities();
public override void AddUsersToRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override string ApplicationName
{
get;
set;
}
public override void CreateRole(string roleName)
{
throw new NotImplementedException();
}
public override bool DeleteRole(string roleName, bool throwOnPopulatedRole)
{
throw new NotImplementedException();
}
public override string[] FindUsersInRole(string roleName, string usernameToMatch)
{
throw new NotImplementedException();
}
public override string[] GetAllRoles()
{
throw new NotImplementedException();
}
public override string[] GetRolesForUser(string username)
{
throw new NotImplementedException();
}
public override string[] GetUsersInRole(string roleName)
{
throw new NotImplementedException();
}
public override void RemoveUsersFromRoles(string[] usernames, string[] roleNames)
{
throw new NotImplementedException();
}
public override bool IsUserInRole(string username, string roleName)
{
vUser user = db.vUsers.Where(u => u.UserName == username).First();
if (roleName == "User")
{
if (user.IsAllowedToView == true)
{
return true;
}
else
{
return false;
}
}
else if (roleName == "Administrator")
{
if (user.IsAllowedToSubmit == true)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
public override bool RoleExists(string roleName)
{
if (roleName == "User" || roleName == "Administrator")
{
return true;
}
else
{
return false;
}
}
}
當我使用我的控制器[Authorize]
註釋,並調用HttpContext.Current.User.Identity.Name
返回該我用的ID登錄到我的機器。 (AD的一部分)但是,如果我使用[Authorize(Roles =「User」)],它會一再詢問我的用戶名和密碼,並且不接受任何內容。我把斷點放在MyRoleProvider類的每一個方法上,但是程序並沒有停下來,這讓我覺得它甚至不會調用提供者。
看到我的答案[here](http://stackoverflow.com/a/32590333/1139830)。您只需要繼承一個類,連接方法以從表中提取適當的數據,然後就可以開始在應用程序中使用這些角色。 – mason
@mason感謝您將我引導至該帖子。我已經實現了角色管理器,並添加到了我的web.config中。我現在的問題是我如何將用戶ID傳遞給角色管理器。我在控制器的頂部有'[Authorize(Roles =「User」)]',但它不允許我查看它。如何將用戶名參數傳遞給public override bool IsUserInRole(string username,string roleName)? – Jail
你不需要。當我們在web.config中註冊我們的角色管理器時,就像我在答案中顯示的那樣,系統意識到了這一點。如果您要查看該「Authorize'屬性的源代碼,您將看到它代表您正在調用註冊角色管理器(如果您想驗證,請在角色管理器中設置斷點)。因此,您無需手動獲取用戶名並將其傳遞給角色管理員。但是,如果你確實需要用戶名,出於其他原因,這來自'HttpContext.Current.User.Identity.Name'。 – mason