所以我在我的 mvc .net 应用程序中拥有三个角色,管理员、公司和员工,该应用程序在单独的数据库中使用 asp.net 成员资格。我现在将 .net 成员资格移到了不同的数据库中,因为每次我修改模型时,.net 成员资格表都会被删除。
无论如何,我在操作方法中使用 if/else 处理不同的角色。例如,在 Index() 操作中,我检查用户是否处于管理员角色,然后基于此创建模型和 linq 查询。如果用户是公司角色,则查询不同,如果用户是员工角色,则查询不同。检查下面的代码。if 条件后创建的模型传递给 View。
我觉得这不是处理角色的最佳方式。这是处理角色的最佳方式吗?我也在考虑不同的领域,但我对不同的角色使用相同的观点,我认为这可能不会有成效。
非常感谢任何建议/想法。
[Authorize]
public class CompanyController : Controller
{
private MyDBContext db = new MyDBContext();
//
// GET: /Company/
public ViewResult Index()
{
var viewModel = new CompanyIndexViewModel();
if (Roles.IsUserInRole("administrators")) {
viewModel = new CompanyIndexViewModel { Companies = db.Companies.ToList() };
}
else if (Roles.IsUserInRole("companies")) {
viewModel = new CompanyIndexViewModel { Companies = db.Companies.Where(c => c.Username.ToLower().Equals(this.User.Identity.Name.ToLower())).ToList() };
}
else if (Roles.IsUserInRole("employees")) {
string userName = this.User.Identity.Name.ToLower();
var companies = db.Companies.Where(c => c.Appointments.Any(a =>
a.Employee.Username.ToLower() == userName)).ToList();
viewModel = new CompanyIndexViewModel { Companies = companies.ToList() };
}
return View(viewModel);
}
....