所以我有三個角色,管理員,公司和員工在我的mvc.net應用程序中使用單獨的數據庫中的asp.net成員資格。我現在將.net成員資格移動到了另一個數據庫中,因爲每次修改模型時,.net成員資格表都會被刪除。有沒有更好的方式來實現基於角色的acton和在MVC中查看比if/else?
無論如何,我正在使用操作方法中的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);
}
....
是的,這是更好的解決方案。現在我想知道是否有可能爲這種情況創建一個橫切解決方案。 – Thupten 2012-07-17 02:38:18
是的 - 請參閱@Simon Whitehead的回答 – StanK 2012-07-17 05:05:07