ScientificReport
MembershipController.cs
Go to the documentation of this file.
1 using System;
2 using Microsoft.AspNetCore.Authorization;
3 using Microsoft.AspNetCore.Mvc;
9 
10 namespace ScientificReport.Controllers
11 {
12  [Authorize(Roles = UserProfileRole.Any)]
13  public class MembershipController : Controller
14  {
15  private readonly IMembershipService _membershipService;
16  private readonly IDepartmentService _departmentService;
17  private readonly IUserProfileService _userProfileService;
18 
20  IMembershipService membershipService,
21  IDepartmentService departmentService,
22  IUserProfileService userProfileService
23  )
24  {
25  _membershipService = membershipService;
26  _departmentService = departmentService;
27  _userProfileService = userProfileService;
28  }
29 
30  // GET: Membership
31  public IActionResult Index(MembershipIndexModel model)
32  {
33  model.Memberships = _membershipService.GetPageByRole(model.CurrentPage, model.PageSize, User);
34  model.Count = _membershipService.GetCountByRole(User);
35  return View(model);
36  }
37 
38  // GET: Membership/Details/{id}
39  public IActionResult Details(Guid? id)
40  {
41  if (id == null)
42  {
43  return NotFound();
44  }
45 
46  var membership = _membershipService.GetById(id.Value);
47  if (membership == null)
48  {
49  return NotFound();
50  }
51 
52  if (!UserHasPermission(membership))
53  {
54  return Forbid();
55  }
56 
57  return View(membership);
58  }
59 
60  // GET: Membership/Create
61  public IActionResult Create() => View();
62 
63  // POST: Membership/Create
64  [HttpPost]
65  [ValidateAntiForgeryToken]
66  public IActionResult Create(MembershipModel model)
67  {
68  if (!ModelState.IsValid)
69  {
70  return View(model);
71  }
72 
73  model.User = _userProfileService.Get(User);
74  _membershipService.CreateItem(model);
75 
76  return RedirectToAction(nameof(Index));
77  }
78 
79  // GET: Membership/Edit/{id}
80  public IActionResult Edit(Guid? id)
81  {
82  if (id == null)
83  {
84  return NotFound();
85  }
86 
87  var membership = _membershipService.GetById(id.Value);
88  if (membership == null)
89  {
90  return NotFound();
91  }
92 
93  if (!UserHasPermission(membership))
94  {
95  return Forbid();
96  }
97 
98  return View(new MembershipEditModel(membership));
99  }
100 
101  // POST: Membership/Edit/{id}
102  [HttpPost]
103  [ValidateAntiForgeryToken]
104  public IActionResult Edit(Guid id, MembershipEditModel model)
105  {
106  if (id != model.Id || !_membershipService.Exists(id))
107  {
108  return NotFound();
109  }
110 
111  if (!UserHasPermission(_membershipService.GetById(id)))
112  {
113  return Forbid();
114  }
115 
116  if (!ModelState.IsValid)
117  {
118  return View(model);
119  }
120 
121  _membershipService.UpdateItem(model);
122  return RedirectToAction(nameof(Index));
123  }
124 
125  // GET: Membership/Delete/{id}
126  public IActionResult Delete(Guid? id)
127  {
128  if (id == null)
129  {
130  return NotFound();
131  }
132 
133  var membership = _membershipService.GetById(id.Value);
134  if (membership == null)
135  {
136  return NotFound();
137  }
138 
139  if (!UserHasPermission(membership))
140  {
141  return Forbid();
142  }
143 
144  return View(membership);
145  }
146 
147  // POST: Membership/Delete/{id}
148  [HttpPost, ActionName("Delete")]
149  [ValidateAntiForgeryToken]
150  public IActionResult DeleteConfirmed(Guid id)
151  {
152  if (!_membershipService.Exists(id))
153  {
154  return NotFound();
155  }
156 
157  if (!UserHasPermission(_membershipService.GetById(id)))
158  {
159  return Forbid();
160  }
161 
162  _membershipService.DeleteById(id);
163  return RedirectToAction(nameof(Index));
164  }
165 
166  private bool UserHasPermission(Membership membership)
167  {
168  var user = _userProfileService.Get(User);
169  var department = _departmentService.Get(d => d.Staff.Contains(user));
170  return PageHelpers.IsAdmin(User) ||
171  PageHelpers.IsHeadOfDepartment(User) &&
172  department.Staff.Contains(membership.User) ||
173  membership.User.Id == user.Id;
174  }
175  }
176 }
MembershipController(IMembershipService membershipService, IDepartmentService departmentService, IUserProfileService userProfileService)
IActionResult Create(MembershipModel model)
IActionResult Index(MembershipIndexModel model)
virtual UserProfile.UserProfile User
Definition: Membership.cs:22
IActionResult Edit(Guid id, MembershipEditModel model)