240 lines
8.1 KiB
HTML
240 lines
8.1 KiB
HTML
|
{{define "title"}}Admin - Scopes & Permissions{{end}}
|
||
|
{{define "content"}}
|
||
|
{{$Root := .}}
|
||
|
<div class="container">
|
||
|
<section class="hero is-danger is-bold">
|
||
|
<div class="hero-body">
|
||
|
<div class="container">
|
||
|
<h1 class="title">
|
||
|
Scopes & Permissions
|
||
|
</h1>
|
||
|
</div>
|
||
|
</div>
|
||
|
</section>
|
||
|
|
||
|
{{if or (eq .Intent "new") (eq .Intent "edit")}}
|
||
|
<!-- Create New/Edit a Group -->
|
||
|
<div class="columns mt-2">
|
||
|
<div class="column is-three-quarters">
|
||
|
<h1 class="title">
|
||
|
{{if .EditGroupID}}Edit{{else}}New{{end}} Admin Group
|
||
|
</h1>
|
||
|
<form action="{{.Request.URL.Path}}" method="POST">
|
||
|
{{InputCSRF}}
|
||
|
<input type="hidden" name="id" value="{{.EditGroupID}}">
|
||
|
|
||
|
<div class="field">
|
||
|
<label class="label" for="name">Group Name</label>
|
||
|
<input type="text" class="input"
|
||
|
name="name"
|
||
|
id="name"
|
||
|
autocomplete="off"
|
||
|
value="{{.EditGroup.Name}}"
|
||
|
placeholder="Forum Moderators"
|
||
|
{{if .EditGroupID}}readonly{{end}}>
|
||
|
</div>
|
||
|
|
||
|
<div class="field">
|
||
|
<label class="label" for="scopes">Scopes</label>
|
||
|
<textarea class="textarea"
|
||
|
cols="80" rows="4"
|
||
|
name="scopes"
|
||
|
id="scopes"
|
||
|
placeholder="one.scope.per.line">{{.EditGroup.ScopesString}}</textarea>
|
||
|
<p class="help">
|
||
|
Enter scopes one per line. Wildcards (*) may be used, as in <code>social.moderator.*</code>
|
||
|
</p>
|
||
|
</div>
|
||
|
|
||
|
<div class="field">
|
||
|
<label class="label">Admin Users</label>
|
||
|
{{range .AdminUsers}}
|
||
|
<div>
|
||
|
<label class="checkbox">
|
||
|
<input type="checkbox"
|
||
|
name="username"
|
||
|
value="{{.Username}}"
|
||
|
{{if $Root.EditGroup.HasAdmin .Username}}checked{{end}}>
|
||
|
{{.Username}}
|
||
|
</label>
|
||
|
</div>
|
||
|
{{end}}
|
||
|
<p class="help">
|
||
|
Select the admin user(s) who should be a part of this group.
|
||
|
</p>
|
||
|
</div>
|
||
|
|
||
|
<div class="field">
|
||
|
<button type="submit" class="button is-primary"
|
||
|
name="intent"
|
||
|
value="save">
|
||
|
Save Changes
|
||
|
</button>
|
||
|
|
||
|
{{if .EditGroupID}}
|
||
|
<button type="submit" class="button is-danger"
|
||
|
name="intent"
|
||
|
value="delete"
|
||
|
onclick="return window.confirm('Are you sure you want to delete this group?')">
|
||
|
<i class="fa fa-trash mr-1"></i>
|
||
|
Delete
|
||
|
</button>
|
||
|
{{end}}
|
||
|
|
||
|
<a href="{{.Request.URL.Path}}" class="button is-secondary">
|
||
|
Cancel
|
||
|
</a>
|
||
|
</div>
|
||
|
</form>
|
||
|
</div>
|
||
|
|
||
|
<div class="column is-one-quarter">
|
||
|
<div class="card">
|
||
|
<div class="card-header has-background-info">
|
||
|
<p class="card-header-title has-text-light">
|
||
|
Admin Scopes
|
||
|
</p>
|
||
|
</div>
|
||
|
<div class="card-content">
|
||
|
<p class="block">
|
||
|
The complete listing of available admin scopes on the website
|
||
|
are as follows:
|
||
|
</p>
|
||
|
|
||
|
<ul>
|
||
|
{{range .AdminScopes}}
|
||
|
<li>{{.}}</li>
|
||
|
{{end}}
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
{{else}}
|
||
|
<div class="p-4">
|
||
|
|
||
|
<p class="block">
|
||
|
This page allows you to manage the nuanced permissions for admin accounts on {{PrettyTitle}}.
|
||
|
Permissions are managed by placing admins into groups, and in turn, assigning one or more
|
||
|
scopes to each group.
|
||
|
</p>
|
||
|
|
||
|
<!-- Superusers group init? -->
|
||
|
{{if .NeedSuperuserInit}}
|
||
|
<div class="notification is-warning content">
|
||
|
<p>
|
||
|
The <strong>Superusers</strong> group was not found! Click the button below
|
||
|
to initialize the Superusers group and add yourself to it automatically.
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
<form action="{{.Request.URL.Path}}" method="POST">
|
||
|
{{InputCSRF}}
|
||
|
<button type="submit"
|
||
|
name="intent"
|
||
|
value="init-superusers"
|
||
|
class="button is-danger">
|
||
|
Initialize the Superusers Group
|
||
|
</button>
|
||
|
</form>
|
||
|
</p>
|
||
|
</div>
|
||
|
{{end}}
|
||
|
|
||
|
<hr>
|
||
|
|
||
|
<h1 class="title">Admin Users</h1>
|
||
|
|
||
|
<p class="block">
|
||
|
Found <strong>{{len .AdminUsers}}</strong> admin user account{{Pluralize (len .AdminUsers)}}.
|
||
|
</p>
|
||
|
|
||
|
<table class="table is-striped is-fullwidth">
|
||
|
<thead>
|
||
|
<tr>
|
||
|
<th>ID</th>
|
||
|
<th>Username</th>
|
||
|
<th>Email</th>
|
||
|
<th>Admin Groups</th>
|
||
|
<th>Scopes</th>
|
||
|
</tr>
|
||
|
</thead>
|
||
|
<tbody>
|
||
|
{{range .AdminUsers}}
|
||
|
<tr>
|
||
|
<td>{{.ID}}</td>
|
||
|
<td><a href="/u/{{.Username}}">{{.Username}}</a></td>
|
||
|
<td><a href="mailto:{{.Email}}">{{.Email}}</a></td>
|
||
|
<td>
|
||
|
<ul>
|
||
|
{{range .ListAdminGroups}}
|
||
|
<li>{{.}}</li>
|
||
|
{{end}}
|
||
|
</ul>
|
||
|
</td>
|
||
|
<td>
|
||
|
<ul>
|
||
|
{{range .ListAdminScopes}}
|
||
|
<li>{{.}}</li>
|
||
|
{{end}}
|
||
|
</ul>
|
||
|
</td>
|
||
|
</tr>
|
||
|
{{end}}
|
||
|
</tbody>
|
||
|
</table>
|
||
|
|
||
|
<hr>
|
||
|
|
||
|
<h1 class="title">Admin Groups</h1>
|
||
|
|
||
|
<p class="block">
|
||
|
Found <strong>{{len .AdminGroups}}</strong> admin group{{Pluralize (len .AdminUsers)}}.
|
||
|
<a href="{{.Request.URL.Path}}?intent=new">Create new group.</a>
|
||
|
</p>
|
||
|
|
||
|
<table class="table is-striped is-fullwidth">
|
||
|
<thead>
|
||
|
<tr>
|
||
|
<th>ID</th>
|
||
|
<th>Name</th>
|
||
|
<th>Scopes</th>
|
||
|
<th>Users</th>
|
||
|
<th>Edit</th>
|
||
|
</tr>
|
||
|
</thead>
|
||
|
<tbody>
|
||
|
{{range .AdminGroups}}
|
||
|
<tr>
|
||
|
<td>{{.ID}}</td>
|
||
|
<td>{{.Name}}</td>
|
||
|
<td>
|
||
|
<ul>
|
||
|
{{range .Scopes}}
|
||
|
<li>{{.Scope}}</li>
|
||
|
{{end}}
|
||
|
</ul>
|
||
|
</td>
|
||
|
<td>
|
||
|
<ul>
|
||
|
{{range .Users}}
|
||
|
<li>
|
||
|
<a href="/u/{{.Username}}">{{.Username}}</a>
|
||
|
</li>
|
||
|
{{end}}
|
||
|
</ul>
|
||
|
</td>
|
||
|
<td>
|
||
|
<a href="{{$Root.Request.URL.Path}}?intent=edit&id={{.ID}}">Edit</a>
|
||
|
</td>
|
||
|
</tr>
|
||
|
{{end}}
|
||
|
</tbody>
|
||
|
</table>
|
||
|
|
||
|
</div>
|
||
|
{{end}}
|
||
|
|
||
|
</div>
|
||
|
{{end}}
|