Skip to content

Commit

Permalink
Zakończony moduł zarządzania pracownikami.
Browse files Browse the repository at this point in the history
  • Loading branch information
tomaszdudkowski committed Jan 6, 2021
1 parent 0d24c1f commit 29cab10
Show file tree
Hide file tree
Showing 17 changed files with 958 additions and 521 deletions.
37 changes: 3 additions & 34 deletions monday/Areas/Identity/Pages/Account/Register.cshtml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
@page
@model RegisterModel
@{
ViewData["Title"] = "Rejestracja nowego użytkownika";
ViewData["Title"] = "Tworzenie loginu i hasła";
}

<h1>@ViewData["Title"]</h1>
Expand All @@ -13,7 +13,7 @@
<div asp-validation-summary="All" class="text-danger"></div>
<div class="form-group">
<label asp-for="Input.Email">Adres Email</label>
<input asp-for="Input.Email" class="form-control" />
<input asp-for="Input.Email" class="form-control" value="" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
<div class="form-group">
Expand All @@ -26,40 +26,9 @@
<input asp-for="Input.ConfirmPassword" class="form-control" />
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
<button type="submit" class="btn btn-primary">Zarejestruj się</button>
<button type="submit" class="btn btn-primary">Utwórz login i hasło</button>
</form>
</div>
@* Usułga do logowania się poprzez portale społecznościowe i zewnętrzne usuługi. *@
@*<div class="col-md-6 col-md-offset-2">
<section>
<h4>Use another service to register.</h4>
<hr />
@{
if ((Model.ExternalLogins?.Count ?? 0) == 0)
{
<div>
<p>
There are no external authentication services configured. See <a href="https://go.microsoft.com/fwlink/?LinkID=532715">this article</a>
for details on setting up this ASP.NET application to support logging in via external services.
</p>
</div>
}
else
{
<form id="external-account" asp-page="./ExternalLogin" asp-route-returnUrl="@Model.ReturnUrl" method="post" class="form-horizontal">
<div>
<p>
@foreach (var provider in Model.ExternalLogins)
{
<button type="submit" class="btn btn-primary" name="provider" value="@provider.Name" title="Log in using your @provider.DisplayName account">@provider.DisplayName</button>
}
</p>
</div>
</form>
}
}
</section>
</div>*@
</div>

@section Scripts {
Expand Down
11 changes: 6 additions & 5 deletions monday/Areas/Identity/Pages/Account/Register.cshtml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

namespace mondayWebApp.Areas.Identity.Pages.Account
{
[AllowAnonymous]
[Authorize(Roles = "Superadmin, Admin")]
public class RegisterModel : PageModel
{
private readonly SignInManager<IdentityUser> _signInManager;
Expand Down Expand Up @@ -49,6 +49,7 @@ public class InputModel
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }


[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
Expand All @@ -74,7 +75,7 @@ public async Task<IActionResult> OnPostAsync(string returnUrl = null)
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
if (ModelState.IsValid)
{
var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var user = new IdentityUser { UserName = Input.Email, Email = Input.Email, EmailConfirmed = true };
var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
Expand All @@ -88,16 +89,16 @@ public async Task<IActionResult> OnPostAsync(string returnUrl = null)
values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
protocol: Request.Scheme);

await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
//await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
// $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

if (_userManager.Options.SignIn.RequireConfirmedAccount)
{
return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
}
else
{
await _signInManager.SignInAsync(user, isPersistent: false);
await _signInManager.SignInAsync(user, isPersistent: true);
return LocalRedirect(returnUrl);
}
}
Expand Down
2 changes: 1 addition & 1 deletion monday/Controllers/AdministratorController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

namespace mondayWebApp.Controllers
{
[Authorize(Roles = "Superadmin")]
[Authorize(Roles = "Superadmin, Admin")]
public class AdministratorController : Controller
{
private RoleManager<IdentityRole> roleManager;
Expand Down
127 changes: 106 additions & 21 deletions monday/Controllers/EmployeesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
Expand All @@ -14,10 +15,14 @@ namespace mondayWebApp.Controllers
public class EmployeesController : Controller
{
private readonly ApplicationDbContext _context;
private RoleManager<IdentityRole> roleManager;
private UserManager<IdentityUser> userManager;

public EmployeesController(ApplicationDbContext context)
public EmployeesController(ApplicationDbContext context, RoleManager<IdentityRole> roleMgr, UserManager<IdentityUser> userMgr)
{
_context = context;
roleManager = roleMgr;
userManager = userMgr;
}

// GET: Employees
Expand All @@ -39,7 +44,7 @@ public async Task<IActionResult> Details(int? id)
var employee = await _context.Employees
.Include(e => e.Department)
.Include(e => e.Project)
.FirstOrDefaultAsync(m => m.EmployeeID == id);
.FirstOrDefaultAsync(m => m.EmployeeID.Equals(id));
if (employee == null)
{
return NotFound();
Expand All @@ -48,33 +53,66 @@ public async Task<IActionResult> Details(int? id)
return View(employee);
}

[Authorize(Roles = "Admin")]
[Authorize(Roles = "Superadmin, Admin")]
// GET: Employees/Create
public IActionResult Create()
public async Task<IActionResult> CreateAsync()
{
ViewData["DepartmentID"] = new SelectList(_context.Departments, "DepartmentID", "DepartmentID");
ViewData["ProjectID"] = new SelectList(_context.Projects, "ProjectID", "ProjectID");
ViewData["DepartmentID"] = new SelectList(_context.Departments, "DepartmentID", "DepartmentName");
ViewData["ProjectID"] = new SelectList(_context.Projects, "ProjectID", "ProjectName");
List<IdentityRole> roleList = new List<IdentityRole>();
foreach (var item in _context.Roles)
{
roleList.Add(item);
}
if (User.IsInRole("Admin") && (!User.IsInRole("Superadmin")))
{
IdentityRole superadminRole = await roleManager.FindByNameAsync("Superadmin");
roleList.Remove(superadminRole);
}
SelectList roleItems = new SelectList(roleList, "Id", "Name");
ViewData["EmployeeRole"] = roleItems;
return View();
}

[Authorize(Roles = "Admin")]
[Authorize(Roles = "Superadmin, Admin")]
// POST: Employees/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("EmployeeID,EmployeeName,EmployeeSurname,EmployeeDateOfBirth,EmployeePhoneNumber,EmployeeRole,DepartmentID,ProjectID,IsEdited,IsChecked")] Employee employee)
public async Task<IActionResult> Create([Bind("EmployeeID,EmployeePassword,EmployeeEmail,EmployeeName,EmployeeSurname,EmployeeDateOfBirth,EmployeePhoneNumber,EmployeeRole,DepartmentID,ProjectID,IsEdited,IsChecked,IsKierownik")] Employee employee)
{
if (ModelState.IsValid)
{
_context.Add(employee);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
var user = new IdentityUser();
user.UserName = employee.EmployeeEmail;
user.Email = employee.EmployeeEmail;
user.EmailConfirmed = true;

string UserPassword = employee.EmployeePassword;

IdentityResult identityResult = await userManager.CreateAsync(user, UserPassword);

if (identityResult.Succeeded)
{
var roleId = Request.Form["EmployeeRole"];
var role = await roleManager.FindByIdAsync(roleId);
var result = await userManager.AddToRoleAsync(user, role.Name);
var TempUser = await userManager.FindByEmailAsync(user.Email);
employee.EmployeeUserID = TempUser.Id;
employee.EmployeePassword = "";
_context.Add(employee);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}


}
ViewData["DepartmentID"] = new SelectList(_context.Departments, "DepartmentID", "DepartmentID", employee.DepartmentID);
ViewData["ProjectID"] = new SelectList(_context.Projects, "ProjectID", "ProjectID", employee.ProjectID);
ViewData["EmployeeRole"] = new SelectList(_context.Roles, "Id", "Name", employee.EmployeeRole);
return View(employee);
}

[Authorize(Roles = "Admin")]
[Authorize(Roles = "Superadmin, Admin")]
// GET: Employees/Edit/5
public async Task<IActionResult> Edit(int? id)
{
Expand All @@ -90,16 +128,39 @@ public async Task<IActionResult> Edit(int? id)
}
ViewData["DepartmentID"] = new SelectList(_context.Departments, "DepartmentID", "DepartmentID", employee.DepartmentID);
ViewData["ProjectID"] = new SelectList(_context.Projects, "ProjectID", "ProjectID", employee.ProjectID);
List<IdentityRole> roleList = new List<IdentityRole>();
foreach (var item in _context.Roles)
{
roleList.Add(item);
}
if (User.IsInRole("Admin") && (!User.IsInRole("Superadmin")))
{
IdentityRole superadminRole = await roleManager.FindByNameAsync("Superadmin");
roleList.Remove(superadminRole);
}
var user = await userManager.FindByIdAsync(employee.EmployeeUserID);
var userRole = _context.UserRoles.ToList();
string role = "";
foreach (var item in userRole)
{
if (item.UserId == user.Id)
{
role = item.RoleId;
}
}
SelectList roleItems = new SelectList(roleList, "Id", "Name", role);
ViewData["EmployeeRole"] = roleItems;
return View(employee);
}

[Authorize(Roles = "Admin")]
[Authorize(Roles = "Superadmin, Admin")]
// POST: Employees/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("EmployeeID,EmployeeName,EmployeeSurname,EmployeeDateOfBirth,EmployeePhoneNumber,EmployeeRole,DepartmentID,ProjectID,IsEdited,IsChecked")] Employee employee)
public async Task<IActionResult> Edit(string id, [Bind("EmployeeID,EmployeePassword,EmployeeCurrentPassword,EmployeeEmail,EmployeeName,EmployeeSurname,EmployeeDateOfBirth,EmployeePhoneNumber,EmployeeRole,DepartmentID,ProjectID,IsEdited,IsChecked,IsKierownik,EmployeeUserID")] Employee employee)
{
if (id != employee.EmployeeID)

if (id.Equals(employee.EmployeeID))
{
return NotFound();
}
Expand All @@ -108,12 +169,34 @@ public async Task<IActionResult> Edit(int id, [Bind("EmployeeID,EmployeeName,Emp
{
try
{
_context.Update(employee);
await _context.SaveChangesAsync();
var user = await userManager.FindByIdAsync(employee.EmployeeUserID);

if (employee.EmployeeEmail != null)
{
user.UserName = employee.EmployeeEmail;
}

if (employee.EmployeePassword != null)
{
string NewUserPassword = employee.EmployeePassword;
string CurrentUserPassword = employee.EmployeeCurrentPassword;

await userManager.ChangePasswordAsync(user, CurrentUserPassword, NewUserPassword);
}

var roleId = Request.Form["EmployeeRole"];
if (roleId == Request.Form["EmployeeRole"])
{
var role = await roleManager.FindByIdAsync(roleId);
var result = await userManager.AddToRoleAsync(user, role.Name);
employee.EmployeePassword = "";
_context.Update(employee);
await _context.SaveChangesAsync();
}
}
catch (DbUpdateConcurrencyException)
{
if (!EmployeeExists(employee.EmployeeID))
if (!EmployeeExists(employee.EmployeeUserID))
{
return NotFound();
}
Expand Down Expand Up @@ -141,7 +224,7 @@ public async Task<IActionResult> Delete(int? id)
var employee = await _context.Employees
.Include(e => e.Department)
.Include(e => e.Project)
.FirstOrDefaultAsync(m => m.EmployeeID == id);
.FirstOrDefaultAsync(m => m.EmployeeID.Equals(id));
if (employee == null)
{
return NotFound();
Expand All @@ -157,14 +240,16 @@ public async Task<IActionResult> Delete(int? id)
public async Task<IActionResult> DeleteConfirmed(int id)
{
var employee = await _context.Employees.FindAsync(id);
var user = await userManager.FindByIdAsync(employee.EmployeeUserID);
IdentityResult identityResult = await userManager.DeleteAsync(user);
_context.Employees.Remove(employee);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}

private bool EmployeeExists(int id)
private bool EmployeeExists(string id)
{
return _context.Employees.Any(e => e.EmployeeID == id);
return _context.Employees.Any(e => e.EmployeeID.Equals(id));
}
}
}
Loading

0 comments on commit 29cab10

Please sign in to comment.