Start to build edit user form

This commit is contained in:
Pierre HUBERT 2022-04-07 17:32:29 +02:00
parent af903de7c2
commit 91d71c7006
3 changed files with 35 additions and 20 deletions

View File

@ -18,12 +18,12 @@ pub struct User {
/// None = all services /// None = all services
/// Some([]) = no service /// Some([]) = no service
pub authorized_services: Option<Vec<ClientID>>, pub authorized_clients: Option<Vec<ClientID>>,
} }
impl User { impl User {
pub fn can_access_app(&self, id: &ClientID) -> bool { pub fn can_access_app(&self, id: &ClientID) -> bool {
match &self.authorized_services { match &self.authorized_clients {
None => true, None => true,
Some(c) => c.contains(id) Some(c) => c.contains(id)
} }
@ -54,7 +54,7 @@ impl Default for User {
need_reset_password: false, need_reset_password: false,
enabled: true, enabled: true,
admin: false, admin: false,
authorized_services: Some(Vec::new()), authorized_clients: Some(Vec::new()),
} }
} }
} }

View File

@ -55,7 +55,7 @@ async fn main() -> std::io::Result<()> {
username: DEFAULT_ADMIN_USERNAME.to_string(), username: DEFAULT_ADMIN_USERNAME.to_string(),
password: hash_password(DEFAULT_ADMIN_PASSWORD).unwrap(), password: hash_password(DEFAULT_ADMIN_PASSWORD).unwrap(),
need_reset_password: true, need_reset_password: true,
authorized_services: None, authorized_clients: None,
admin: true, admin: true,
..Default::default() ..Default::default()
}; };

View File

@ -66,34 +66,49 @@
</div> </div>
</div> </div>
<!-- Granted services --> <!-- Granted clients -->
<fieldset class="form-group"> <fieldset class="form-group">
<legend class="mt-4">Granted services</legend> <legend class="mt-4">Granted clients</legend>
<div class="form-check"> <div class="form-check">
<label class="form-check-label"> <label class="form-check-label">
<input type="radio" class="form-check-input" name="granted_services" <input type="radio" class="form-check-input" name="granted_clients"
value="all_services" {% if u.authorized_services== None %} checked="" {% endif %}> value="all_clients" {% if u.authorized_clients== None %} checked="" {% endif %}>
Grant all services Grant all clients
</label> </label>
</div> </div>
<div class="form-check"> <div class="form-check">
<label class="form-check-label"> <label class="form-check-label">
<input type="radio" class="form-check-input" name="granted_services" <input type="radio" class="form-check-input" name="granted_clients"
value="custom_services" {% if u.authorized_services !=None %} checked="checked" {% endif %}> value="custom_clients" {% if u.authorized_clients !=None %} checked="checked" {% endif %}>
Manually specify allowed services Manually specify allowed clients
</label> </label>
</div> </div>
{% for c in clients %} <div id="clients_target">
<div class="form-check"> {% for c in clients %}
<input class="form-check-input" type="checkbox" class="authorize_client" data-id="{{ c.id.0 }}" <div class="form-check">
{% if u.can_access_app(c.id) %} checked="" {% endif %}> <input class="form-check-input" type="checkbox" class="authorize_client" data-id="{{ c.id.0 }}"
<label class="form-check-label" for="admin"> {% if u.can_access_app(c.id) %} checked="" {% endif %}>
{{ c.name }} <label class="form-check-label" for="admin">
</label> {{ c.name }}
</label>
</div>
{% endfor %}
</div> </div>
{% endfor %}
</fieldset> </fieldset>
</form> </form>
<script>
// Clients granted
function refreshDisplayAuthorizedClients() {
const clientsSelectorEl = document.getElementById("clients_target");
const radioBtn = document.querySelector("input[name=granted_clients][value=custom_clients]");
clientsSelectorEl.style.display = radioBtn.checked ? "block" : "none";
}
refreshDisplayAuthorizedClients();
document.querySelectorAll("input[name=granted_clients]").forEach(el=> {
el.addEventListener("change", refreshDisplayAuthorizedClients)
})
</script>
{% endblock content %} {% endblock content %}