212 lines
7.5 KiB
HTML
212 lines
7.5 KiB
HTML
{{define "users.html"}}
|
|
<!doctype html>
|
|
<html lang="{{.Language}}">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
<title>
|
|
Users · DoGaMa
|
|
</title>
|
|
<link rel="stylesheet" href="/static/app.v1.css">
|
|
</head>
|
|
<body class="app-body">
|
|
{{template "sidebar" .}}
|
|
<main class="app-main">
|
|
<div class="page-heading">
|
|
<div>
|
|
<p class="eyebrow">
|
|
Administration
|
|
</p>
|
|
<h1>
|
|
Users
|
|
</h1>
|
|
<p>
|
|
Create identities, assign global roles and control access to each game server.
|
|
</p>
|
|
</div>
|
|
<a class="button-secondary link-button" href="/administration">
|
|
Administration settings
|
|
</a>
|
|
</div>
|
|
<section class="panel settings-section">
|
|
<h2>
|
|
Create user
|
|
</h2>
|
|
<form method="post" action="/administration/users">
|
|
<input type="hidden" name="csrf_token" value="{{.CSRFToken}}">
|
|
<div class="form-grid">
|
|
<label>
|
|
Username
|
|
<input name="username" required maxlength="64" autocomplete="off">
|
|
</label>
|
|
<label>
|
|
Email
|
|
<input name="email" type="email" required autocomplete="off">
|
|
</label>
|
|
<label>
|
|
Temporary password
|
|
<input name="password" type="password" required minlength="12" autocomplete="new-password">
|
|
</label>
|
|
<label>
|
|
Global role
|
|
<select name="role">
|
|
<option value="user">
|
|
User
|
|
</option>
|
|
<option value="admin">
|
|
Administrator
|
|
</option>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
<label class="check">
|
|
<input type="checkbox" name="disabled" value="yes">
|
|
Create disabled
|
|
</label>
|
|
<button type="submit">
|
|
Create user
|
|
</button>
|
|
</form>
|
|
</section>
|
|
{{range .Users}}
|
|
{{$user := .}}
|
|
<section class="panel settings-section">
|
|
<div class="page-heading">
|
|
<div>
|
|
<h2>
|
|
{{.Username}}
|
|
</h2>
|
|
<p>
|
|
{{if .Disabled}}
|
|
Disabled
|
|
{{else}}
|
|
Active
|
|
{{end}}
|
|
·
|
|
{{.Role}}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
<form method="post" action="/administration/users/{{.ID}}">
|
|
<input type="hidden" name="csrf_token" value="{{$.CSRFToken}}">
|
|
<div class="form-grid">
|
|
<label>
|
|
Email
|
|
<input name="email" type="email" value="{{.Email}}" required>
|
|
</label>
|
|
<label>
|
|
Global role
|
|
<select name="role">
|
|
<option value="user"{{if eq .Role "user"}} selected{{end}}>
|
|
User
|
|
</option>
|
|
<option value="admin"{{if eq .Role "admin"}} selected{{end}}>
|
|
Administrator
|
|
</option>
|
|
</select>
|
|
</label>
|
|
</div>
|
|
<label class="check">
|
|
<input type="checkbox" name="disabled" value="yes"{{if .Disabled}} checked{{end}}>
|
|
Disabled (active sessions are revoked)
|
|
</label>
|
|
<button type="submit">
|
|
Save user
|
|
</button>
|
|
</form>
|
|
{{if eq .Role "user"}}
|
|
<h3>
|
|
Instance access
|
|
</h3>
|
|
{{if $.Instances}}
|
|
{{range $.Instances}}
|
|
{{$instance := .}}
|
|
{{$membership := index (index $.UserAccess $user.ID) .ID}}
|
|
<details>
|
|
<summary>
|
|
{{if .Preview.DisplayName}}
|
|
{{.Preview.DisplayName}}
|
|
{{else}}
|
|
{{.ID}}
|
|
{{end}}
|
|
—
|
|
{{if $membership.Role}}
|
|
{{$membership.Role}}
|
|
{{else}}
|
|
No access
|
|
{{end}}
|
|
</summary>
|
|
<form method="post" action="/administration/users/{{$user.ID}}/memberships/{{.ID}}">
|
|
<input type="hidden" name="csrf_token" value="{{$.CSRFToken}}">
|
|
<label>
|
|
Instance role
|
|
<select name="role">
|
|
<option value="none"{{if not $membership.Role}} selected{{end}}>
|
|
No access
|
|
</option>
|
|
<option value="user"{{if eq $membership.Role "user"}} selected{{end}}>
|
|
User
|
|
</option>
|
|
<option value="manager"{{if eq $membership.Role "manager"}} selected{{end}}>
|
|
Manager
|
|
</option>
|
|
</select>
|
|
</label>
|
|
<button type="submit">
|
|
Save access
|
|
</button>
|
|
</form>
|
|
{{if $membership.Role}}
|
|
<div class="permission-grid">
|
|
{{range $.Permissions}}
|
|
{{$effect := index $membership.Overrides .}}
|
|
<form method="post" action="/administration/users/{{$user.ID}}/memberships/{{$instance.ID}}/permissions/{{.}}">
|
|
<input type="hidden" name="csrf_token" value="{{$.CSRFToken}}">
|
|
<label>
|
|
{{.}}
|
|
<select name="effect">
|
|
<option value="inherit"{{if not $effect}} selected{{end}}>
|
|
Role default
|
|
</option>
|
|
<option value="allow"{{if eq $effect "allow"}} selected{{end}}>
|
|
Allow
|
|
</option>
|
|
<option value="deny"{{if eq $effect "deny"}} selected{{end}}>
|
|
Deny
|
|
</option>
|
|
</select>
|
|
</label>
|
|
<button type="submit">
|
|
Save
|
|
</button>
|
|
</form>
|
|
{{end}}
|
|
</div>
|
|
{{end}}
|
|
</details>
|
|
{{end}}
|
|
{{else}}
|
|
<p>
|
|
No game-server instance is currently registered.
|
|
</p>
|
|
{{end}}
|
|
{{else}}
|
|
<p>
|
|
Administrators have implicit access to every instance.
|
|
</p>
|
|
{{end}}
|
|
</section>
|
|
{{else}}
|
|
<section class="panel">
|
|
<p>
|
|
No users found.
|
|
</p>
|
|
</section>
|
|
{{end}}
|
|
</main>
|
|
<script src="/static/app.v2.js">
|
|
</script>
|
|
</body>
|
|
</html>
|
|
{{end}}
|