From: Guillaume Subiron Date: Wed, 30 May 2012 07:37:44 +0000 (+0200) Subject: Admin can select groups in user creation X-Git-Url: http://git.cyclocoop.org/?p=cavote.git;a=commitdiff_plain;h=a2d3a797375c6e14889d89b975ee32e3068926b6 Admin can select groups in user creation --- diff --git a/main.py b/main.py index b00b879..2ab60f8 100755 --- a/main.py +++ b/main.py @@ -148,7 +148,8 @@ def user_password(userid): def admin_users(): if not session.get('user').get('is_admin'): abort(401) - users = query_db('select * from users order by id desc') + users = query_db('select *, roles.name as rolename from (select *, name as username from users join user_role on id=id_user order by id desc) join roles on id_role=roles.id') + # :TODO:maethor:20120530: Find a way to reduce the dict return render_template('admin_users.html', users=users) @app.route('/admin/users/add', methods=['GET', 'POST']) @@ -165,12 +166,23 @@ def admin_user_add(): g.db.execute('insert into users (email, name, organization, password, is_admin) values (?, ?, ?, ?, ?)', [request.form['email'], request.form['username'], request.form['organization'], password, admin]) g.db.commit() - # :TODO:maethor:120528: Send mail - flash(u'Le nouvel utilisateur a été créé avec succès', 'success') - return redirect(url_for('home')) + user = query_db('select * from users where email = ?', [request.form["email"]], one=True) + if user: + for role in request.form.getlist('roles'): + # :TODO:maethor:120528: Check if this role exist + if query_db('select id from roles where id = ?', role, one=True) is None: + abort(401) + g.db.execute('insert into user_role values (?, ?)', [user['id'], role]) + g.db.commit() + # :TODO:maethor:120528: Send mail + flash(u'Le nouvel utilisateur a été créé avec succès', 'success') + return redirect(url_for('admin_users')) + else: + flash(u'Une erreur s\'est produite.', 'error') else: flash(u"Vous devez spécifier une adresse email.", 'error') - return render_template('admin_user_new.html') + groups = query_db('select * from roles where system=0') + return render_template('admin_user_new.html', groups=groups) #------------- # Roles admin diff --git a/schema.sql b/schema.sql index b24a7f3..c1805c4 100644 --- a/schema.sql +++ b/schema.sql @@ -20,6 +20,14 @@ create table roles ( system INTEGER default 0 not null ); +create table user_role ( + id_user INTEGER, + id_role INTEGER, + FOREIGN KEY(id_user) REFERENCES users(id), + FOREIGN KEY(id_role) REFERENCES roles(id), + PRIMARY KEY(id_user, id_role) +); + create table votes ( id INTEGER primary key autoincrement, title TEXT not null, diff --git a/templates/admin_user_new.html b/templates/admin_user_new.html index e3678d0..82c615f 100644 --- a/templates/admin_user_new.html +++ b/templates/admin_user_new.html @@ -25,11 +25,12 @@
- +
- + {% for group in groups %} + + {% endfor %}
diff --git a/templates/admin_users.html b/templates/admin_users.html index 937f885..8ec9eb3 100644 --- a/templates/admin_users.html +++ b/templates/admin_users.html @@ -20,8 +20,8 @@ {% for user in users %} {{ user.email }} - {{ user.name }} - + {{ user.username }} + {{ user.rolename }} {% if user.is_admin %}Oui{% else %}Non{% endif %} Éditer