我对编程很陌生,而且我的英语很差,所以如果这篇文章让你感到困惑,我很抱歉。
我正在实现一个基本的 ASP .NET MVC Web 应用程序,它将管理公司的信息。此应用程序中有两个页面。一种是查看信息,不需要任何东西即可访问此页面。另一种是编辑信息,如果您只有公司的管理员角色,您可以访问此页面。
public ActionResult ViewInfo(string companyId)
{
return View();
}
[Authorize(Roles = "Admin")]
public ActionResult EditInfo(string companyId)
{
return View();
}
如果我有一个可以访问 2 家公司的帐户,但该帐户在两家公司中的角色完全不同。(例如帐户是A公司的管理员和B公司的普通用户)。
有没有什么简单的方法可以根据我要访问的公司来获得角色?我尝试过使用自定义 RoleProvider,但似乎无法将其他参数传递给该方法。
有点像这样?
public class CustomRoleProvider : RoleProvider
{
public override bool IsUserInRole(string username, string roleName)
{
string companyId = GetCompanyId(); // Is there any good way to get this companyId from the Controller?
return userCompanyRoles.Any(u => u.Username == username && u.CompanyId == companyId && u.Roles.Any(r => r.Name == roleName));
}
...
}
编辑
我的应用程序中有 4 个模型:
public class User {
public string Id { get; set;}
...
}
public class Company {
public string Id { get; set;}
...
}
public class Role {
public string Name { get; set;}
...
}
public class UserCompanyRoles {
public string UserId { get; set; }
public string CompanyId { get; set; }
public List<string> Roles { get; set; }
}
所以表格看起来像这样
UserId CompanyId Role
1 A User
1 A Admin
1 B User
2 B Admin
2 C User
3 A Admin
3 C Admin