diff options
-rw-r--r-- | apioforum/db.py | 12 | ||||
-rw-r--r-- | apioforum/forum.py | 10 | ||||
-rw-r--r-- | apioforum/roles.py | 40 | ||||
-rw-r--r-- | apioforum/static/style.css | 2 | ||||
-rw-r--r-- | apioforum/templates/edit_permissions.html | 71 |
5 files changed, 46 insertions, 89 deletions
diff --git a/apioforum/db.py b/apioforum/db.py index b5cba39..5ffd5d9 100644 --- a/apioforum/db.py +++ b/apioforum/db.py @@ -123,8 +123,6 @@ CREATE TABLE role_config ( forum NOT NULL REFERENCES forums(id), id INTEGER PRIMARY KEY, - inherit INT NOT NULL DEFAULT 0, - p_create_threads INT NOT NULL DEFAULT 1, p_reply_threads INT NOT NULL DEFAULT 1, p_view_threads INT NOT NULL DEFAULT 1, @@ -135,14 +133,8 @@ CREATE TABLE role_config ( p_create_subforum INT NOT NULL DEFAULT 0 ); -INSERT INTO role_config (role,forum) SELECT "approved",id FROM forums; -INSERT INTO role_config (role,forum) SELECT "other",id FROM forums; -""", -""" -CREATE TRIGGER default_role_config AFTER INSERT ON forums BEGIN - INSERT INTO role_config (role,forum) VALUES ("approved",new.id); - INSERT INTO role_config (role,forum) VALUES ("other",new.id); -END; +INSERT INTO role_config (role,forum) VALUES ("approved",1); +INSERT INTO role_config (role,forum) VALUES ("other",1); """ ] diff --git a/apioforum/forum.py b/apioforum/forum.py index 69d7650..4b7522c 100644 --- a/apioforum/forum.py +++ b/apioforum/forum.py @@ -126,20 +126,16 @@ def edit_roles(forum_id): role_configs = db.execute( "SELECT * FROM role_config WHERE forum = ? ORDER BY ID ASC", (forum_id,)).fetchall() - overridden = {} - for c in role_configs: - overridden[c['id']] = overridden_perms(forum_id,c['role']) return render_template("edit_permissions.html", forum=forum, role_configs=role_configs, other_roles=["the","test","placeholder"], - overridden=overridden ) -@bp.route("/<int:forum_id>/roles/new/<role_name>",methods=["POST"]) -def add_role(forum_id,role_name): - db.execute +@bp.route("/<int:forum_id>/roles/new",methods=["POST"]) +def add_role(forum_id): + return "placeholder" @bp.route("/search") def search(): diff --git a/apioforum/roles.py b/apioforum/roles.py index f364b04..71efcbd 100644 --- a/apioforum/roles.py +++ b/apioforum/roles.py @@ -14,35 +14,13 @@ permissions = [ def get_role_config(forum_id, role): db = get_db() - return db.execute(""" - SELECT * FROM role_config - WHERE forum = ? AND role = ?; - """, (forum_id,role)).fetchone() -def overridden_perms(forum_id, role): - db = get_db() - p = {} - for perm in permissions: - p[perm] = False - ancestors = db.execute(""" - WITH RECURSIVE fs AS - (SELECT * FROM forums WHERE id = ? - UNION ALL - SELECT forums.* FROM forums, fs WHERE fs.parent=forums.id) - SELECT * FROM fs; - """,(forum_id,)).fetchall()[1:] - for ancestor in ancestors: - config = get_role_config(ancestor['id'], role) - if config and config['inherit']: - for perm in permissions: - p[perm] = p[perm] or not config[perm] - return p - -def forum_perms(forum_id, role): - role_config = get_role_config(forum_id, role) - if not role_config: - role_config = get_role_config(forum_id, "other") - p = {} - overridden = overridden_perms(forum_id, role) - for perm in permissions: - p[perm] = role_config[perm] and not overridden[perm] + fid = forum_id + the = None + while the == None and fid != None: + the = db.execute(""" + SELECT * FROM role_config + WHERE forum = ? AND role = ?; + """, (fid,role)).fetchone() + fid = db.execute(""" + """).fetchone()['parent'] diff --git a/apioforum/static/style.css b/apioforum/static/style.css index 09df395..3813d63 100644 --- a/apioforum/static/style.css +++ b/apioforum/static/style.css @@ -195,6 +195,8 @@ fieldset { margin-bottom: 15px; } border: 1px solid black; } +.role-input { width: 12ch; } + .breadcrumbs { list-style: none; } diff --git a/apioforum/templates/edit_permissions.html b/apioforum/templates/edit_permissions.html index a32ceda..e79c0c7 100644 --- a/apioforum/templates/edit_permissions.html +++ b/apioforum/templates/edit_permissions.html @@ -3,22 +3,20 @@ {% block header %}<h1>{% block title %}role permissions for '{{forum.name}}'{% endblock %}</h1>{% endblock %} {% block content %} <p> - each user has a role in this forum. - the permissions associated with different roles can be configured here. + each user has a role in the forum. + a user may be assigned a role in the forum. + otherwise, the user's role is the same as the parent forum. + everyone's role is "other" by default. </p> <p> - there are three special roles: "bureaucrat", "approved", and "other". - bureaucrats are automatically granted every permission. - everyone by default has the "other" role. - an assigned role is inherited by all subforæ unless overridden. -</p> -<p> - if a role's permissions are set to inherit, - permissions disabled for a role are disabled for that role in all subforæ. + here a set of permissions may be associated with any role. + if a role does not have any permissions configured for this forum, + the permissions set for the role in closest ancestor forum are used. + if no permissions are set for the role in any ancestor forum, + the permissions for the role "other" are used. </p> <form method="post" id="role_config"> -{% set show_footnote = False %} {% for role_config in role_configs %} <fieldset> <legend id="config_{{role_config.role}}">{{role_config.role}}</legend> @@ -31,10 +29,6 @@ /> <label for="{{role_config.role}}_{{p}}" title="{{tooltip}}"> {{- description -}} - {%- if overridden[role_config.id][p] -%} - * - {%- set show_footnote = True -%} - {%- endif -%} </label> <br/> {% endmacro %} @@ -51,41 +45,36 @@ {{perm("p_vote","vote", "allow users with the role to vote on poll threads")}} {{perm("p_create_subforum","create subforæ", - "allow users with the role to create subforæ in this forum. they will automatically become a bureaucrat in this subforum.")}} + "allow users with the role to create subforæ in this forum. " + + "they will automatically become a bureaucrat in this subforum.")}} {% if role_config.role != "other" %} {{perm("p_approve","approve others", "allow users with the role to assign the 'approved' role to those with the 'other' role")}} {% endif %} - <hr/> - <input - type="checkbox" - id="{{role_config.role}}_inherit" - name="{{role_config.role}}_inherit" - {% if role_config.inherit %}checked{% endif %} - /> - <label for="{{role_config.role}}_inherit">inherit</label> </fieldset> {% endfor %} -{% if show_footnote %} - <p>* disabled in inherited permissions from parent forum</p> -{% endif %} </form> -{% if other_roles %} - <fieldset> - <legend>roles from parent foræ</legend> - <ul> - {% for role in other_roles %} - <li>{{role}} - <form action="{{url_for('forum.add_role',forum_id=forum.id,role_name=role)}}" method="POST" style="display:inline"> - <input type="submit" value="add" /> - </form> - </li> - {% endfor %} - </ul> - </fieldset> -{% endif %} +<fieldset> + <legend>add role</legend> + <ul> + {% for role in other_roles %} + <li>{{role}} + <form action="{{url_for('forum.add_role',forum_id=forum.id)}}" method="POST" style="display:inline"> + <input type="hidden" value="{{role}}" name="role" /> + <input type="submit" value="add" /> + </form> + </li> + {% endfor %} + <li> + <form action="{{url_for('forum.add_role',forum_id=forum.id,role_name=role)}}" method="POST" style="display:inline"> + <input type="text" name="role" class="role-input" placeholder="role name"/> + <input type="submit" value="add" /> + </form> + </li> + </ul> +</fieldset> <p>confirm changes?</p> <input type="submit" value="confirm" form="role_config"> |