Remotely/Server/Areas/Identity/Pages/Account/Manage/Organization.cshtml

210 lines
9.5 KiB
Plaintext

@page
@model OrganizationModel
@inject DataService DataService
@{
ViewData["Title"] = "Manage Organization";
var currentUser = DataService.GetUserByName(User.Identity.Name);
var isAdmin = currentUser.IsAdministrator;
}
<h4>@ViewData["Title"]</h4>
@if (isAdmin)
{
<div class="row">
<div class="col-sm-8">
@* Organization Name *@
<div class="form-group mw">
<label class="mb-1">Organization Name</label>
<div class="input-group">
<input id="organizationNameInput" asp-for="OrganizationName" placeholder="Enter a name for your organization" class="form-control" />
<div class="input-group-append">
<div class="fa fa-edit input-group-text"></div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-8">
@* Permissions *@
<div class="form-group">
<label class="mb-1">Permission Groups</label>
<span id="permissionHelpButton" class="fas fa-question-circle pointer"></span>
<select id="permissionList" multiple class="form-control all-permissions-list mb-1">
@foreach (var permission in Model.PermissionList)
{
<option value="@permission.ID">@permission.Name</option>
}
</select>
<div class="text-right mb-3">
<button id="removePermissionButton" type="button" class="btn btn-secondary">Remove</button>
</div>
<div class="input-group">
<input id="permissionInput" placeholder="Add new permission" class="form-control" maxlength="100" />
<span class="input-group-btn">
<button id="addPermissionButton" type="button" class="btn btn-secondary">Add</button>
</span>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12">
@* Users *@
<div class="form-group">
<label class="control-label">Users</label>
<span id="usersHelpButton" class="fas fa-question-circle pointer"></span>
<table class="table table-responsive table-striped table-hover">
<thead>
<tr>
<th>User Name</th>
<th>Administrator</th>
<th>Permissions</th>
<th>Remove</th>
</tr>
</thead>
<tbody>
@for (var i = 0; i < Model.Users.Count; i++)
{
<tr user="@Model.Users[i].ID">
<td class="middle-aligned"><label class="control-label">@Model.Users[i].UserName</label></td>
@if (currentUser.Id == Model.Users[i].ID)
{
<td class="middle-aligned text-center">@Html.CheckBoxFor(x => x.Users[i].IsAdmin, new { user = Model.Users[i].ID, @class = "user-is-admin-checkbox", disabled = "disabled" })</td>
}
else
{
<td class="middle-aligned text-center">@Html.CheckBoxFor(x => x.Users[i].IsAdmin, new { user = Model.Users[i].ID, @class = "user-is-admin-checkbox" })</td>
}
<td><button type="button" data-toggle="modal" data-target=".modal[user='@Model.Users[i].ID']" class="btn btn-primary">Permissions</button></td>
<td><button type="button" class="btn btn-danger remove-user-button" user="@Model.Users[i].ID">Remove</button></td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
@* Invitations *@
<div class="row">
<div class="col-sm-12">
<div class="form-group">
<label class="control-label">Invitations</label>
<span id="invitesHelpButton" class="fas fa-question-circle pointer"></span>
<table id="invitesTable" class="table table-responsive table-striped table-hover">
<thead>
<tr>
<th>Invited User</th>
<th>Administrator</th>
<th>Link(s)</th>
<th>Delete</th>
</tr>
</thead>
<tbody>
@for (var i = 0; i < Model.Invites.Count; i++)
{
<tr invite="@Model.Invites[i].ID">
<td class="middle-aligned"><label class="control-label">@Model.Invites[i].InvitedUser</label></td>
<td class="middle-aligned text-center">@Html.CheckBoxFor(x => x.Invites[i].IsAdmin, new { disabled = "disabled" })</td>
<td class="middle-aligned">
<label class="control-label">
<a href="@Request.Scheme://@Request.Host/Invite/?id=@Model.Invites[i].ID">Join Link</a>
@if (!string.IsNullOrWhiteSpace(Model.Invites[i].ResetUrl))
{
<br />
<a href="@Model.Invites[i].ResetUrl">Reset Password</a>
}
</label>
</td>
<td><button type="button" class="btn btn-danger delete-invite-button" invite="@Model.Invites[i].ID">Delete</button></td>
</tr>
}
</tbody>
</table>
</div>
</div>
</div>
@* Send Invites *@
<div class="row">
<div class="col-sm-8">
<div class="form-group">
<div class="input-group">
<input id="inviteUserInput" placeholder="Username/email to invite" type="email" required class="form-control" />
<div class="input-group-append">
<span class="input-group-text pr-1">Admin?</span>
</div>
<div class="input-group-append">
<div class="input-group-text pl-1">
<input id="inviteIsAdmin" class="checkbox-inline" type="checkbox" />
</div>
</div>
<div class="input-group-append">
<button id="sendInviteButton" type="button" class="btn btn-secondary">Invite</button>
</div>
</div>
</div>
</div>
</div>
@* Modals *@
@for (var i = 0; i < Model.Users.Count; i++)
{
<div user="@Model.Users[i].ID" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Permissions <span class="small text-muted">for @Model.Users[i].UserName</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
</div>
<div class="modal-body">
<select multiple class="form-control user-permissions-list mb-1">
@foreach (var permission in Model.Users[i].Permissions)
{
<option value="@permission.ID">@permission.Name</option>
}
</select>
<div class="text-right mb-3">
<button type="button" class="btn btn-secondary remove-permission-from-user-button" user="@Model.Users[i].ID">
Remove
</button>
</div>
<div class="input-group">
<select class="form-control dropdown all-permissions-list">
@foreach (var permission in Model.PermissionList)
{
<option value="@permission.ID">@permission.Name</option>
}
</select>
<span class="input-group-btn">
<button type="button" class="btn btn-secondary add-permission-to-user-button" user="@Model.Users[i].ID">
Add
</button>
</span>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
}
}
else
{
<h5 class="text-muted">Only organization administrators can view this page.</h5>
}
<script type="module" src="~/scripts/Pages/OrganizationManagement.js">
</script>