Skip to content

Commit

Permalink
Issue #127: 'Redesign the permission management for project creation'
Browse files Browse the repository at this point in the history
  • Loading branch information
CarolinaFernandez committed Apr 18, 2013
1 parent 7420d65 commit 8e424dd
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
from expedient.common.permissions.models import PermissionRequest,\
ObjectPermission
from expedient.common.messaging.models import DatedMessage
from expedient.clearinghouse.project.views import create, create_project_roles
from expedient.clearinghouse.project.models import Project
import uuid

TEMPLATE_PATH = "permissionmgmt"

Expand Down Expand Up @@ -57,7 +60,7 @@ def filter_id(id):
request.session["approved_req_ids"] = approved_req_ids
request.session["delegatable_req_ids"] = delegatable_req_ids
request.session["denied_req_ids"] = denied_req_ids

return HttpResponseRedirect(reverse(confirm_requests))

else:
Expand Down Expand Up @@ -91,26 +94,76 @@ def confirm_requests(request):
if request.method == "POST":
# check if confirmed and then do actions.
if request.POST.get("post", "no") == "yes":
for req, delegate in approved_reqs:
req.allow(can_delegate=delegate)
for req in denied_reqs:
req.deny()
# DatedMessage.objects.post_message_to_user(
# "Request for permission %s for object %s denied."
# % (req.requested_permission.permission.name,
# req.requested_permission.target),
# user=req.requesting_user,
# sender=req.permission_owner,
# msg_type=DatedMessage.TYPE_WARNING)

posted_message = "Request for %s denied." % str(req.requested_permission.target).capitalize()
if req.requested_permission.permission.name == "can_create_project":
# Removes "* Project name: "
try:
project_name = req.message.split("||")[0].strip()[16:]
except:
pass
posted_message = "Request for project %s creation denied." % project_name
# -------------------------------------------
# It is not about permission granting anymore
# -------------------------------------------
DatedMessage.objects.post_message_to_user(
"Request for permission %s for object %s approved."
% (req.requested_permission.permission.name,
req.requested_permission.target),
user=req.requesting_user,
sender=req.permission_owner,
msg_type=DatedMessage.TYPE_SUCCESS)
posted_message,
user = req.requesting_user,
sender = req.permission_owner,
msg_type = DatedMessage.TYPE_WARNING)

for req in denied_reqs:
for req, delegate in approved_reqs:
# --------------------------------------------------------
# Do NOT grant permission to create projects in the future
# --------------------------------------------------------
# req.allow(can_delegate=delegate)
req.deny()
# DatedMessage.objects.post_message_to_user(
# "Request for permission %s for object %s approved."
# % (req.requested_permission.permission.name,
# req.requested_permission.target),
# user=req.requesting_user,
# sender=req.permission_owner,
# msg_type=DatedMessage.TYPE_SUCCESS)

posted_message = "Request for %s approved." % str(req.requested_permission.target).capitalize()
# ---------------------------------------
# Project will be created in a direct way
# ---------------------------------------
if req.requested_permission.permission.name == "can_create_project":
project = Project()
project.uuid = uuid.uuid4()
try:
message = req.message.split("||")
# Removes "* Project name: "
project.name = message[0].strip()[16:]
# Removes "* Project description: "
project.description = message[3].strip()[23:]
posted_message = "Successfully created project %s." % project.name
except:
# If some parsing error were to occur, set random name and description
import random
nonce = str(random.randrange(10000))
project.name = "Project_" % nonce
project.description = "Description_" % nonce
posted_message = "Project %s created, but you might need to edit it." % project.name
project.save()
create_project_roles(project, req.requesting_user)
DatedMessage.objects.post_message_to_user(
"Request for permission %s for object %s denied."
% (req.requested_permission.permission.name,
req.requested_permission.target),
user=req.requesting_user,
sender=req.permission_owner,
msg_type=DatedMessage.TYPE_WARNING)

posted_message,
user = req.requesting_user,
sender = req.permission_owner,
msg_type = DatedMessage.TYPE_SUCCESS)

# After this post we will be done with all this information
del request.session["approved_req_ids"]
del request.session["delegatable_req_ids"]
Expand Down
11 changes: 6 additions & 5 deletions expedient/src/python/expedient/common/permissions/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from expedient.common.messaging.models import DatedMessage
from django.contrib.auth.models import User
import logging
from django.core.mail import send_mail
from expedient.common.utils.mail import send_mail # Wrapper for django.core.mail__send_mail
from django.conf import settings
from django.contrib.auth.models import User
from django.http import QueryDict
Expand Down Expand Up @@ -111,7 +111,6 @@ def request_permission_view(request, permission, permittee,

# Get the object permission name
perm_name = obj_perm.permission.name
perm_name = obj_perm.permission.name

# Get the users who can delegate the permission
if permission_owners_func:
Expand All @@ -133,22 +132,24 @@ def request_permission_view(request, permission, permittee,
permittee=permittee,
requested_permission=obj_perm)

posted_message = "permission %s" % permission.name
if perm_name == "can_create_project":
form = ProjectRequestForm(user_qs, request.POST,
instance=perm_request)
posted_message = "project %s" % str(request.POST["name"])
else:
form = PermissionRequestForm(user_qs, request.POST,
instance=perm_request)
if form.is_valid():
# Post a permission request for the permission owner
perm_request = form.save()
DatedMessage.objects.post_message_to_user(
"Sent request for permission %s to user %s" %
(permission.name, perm_request.permission_owner),
"Sent request for %s to user %s" %
(posted_message, perm_request.permission_owner),
user=request.user, msg_type=DatedMessage.TYPE_SUCCESS)
try:
send_mail(
settings.EMAIL_SUBJECT_PREFIX + "Request for permission %s from user %s" % (permission.name,request.user),
settings.EMAIL_SUBJECT_PREFIX + "Request for %s from user %s" % (posted_message, request.user),
"You have a new request for permission %s from user %s (%s). Please go to the Permission Management section in your Dashboard to manage it: https://%s\n\n Original User Message:\n\"%s\"" % (permission.name,request.user, request.user.email, settings.SITE_IP_ADDR, perm_request.message),
from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=[perm_request.permission_owner.email],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,43 +36,59 @@
{% block content %}
<div class="main">
{% if approved_reqs %}
<h2>The following permission requests will be approved:</h2>
<!--<h2>The following permission requests will be approved:</h2>-->
<h2>The following requests will be approved:</h2>
<ul>
{% for req, delegatable in approved_reqs %}
<li>
Permission
<!--Permission
<a class="perm_name" id="name_{{ req.id }}" href="#">
{{ req.requested_permission.permission.name }}
</a>
requested by {{ req.requesting_user }} for object
{{ req.requested_permission.target }} will be granted to
</a>-->
{{ req.requested_permission.target|title }}
requested by {{ req.requesting_user }} <!--for object
{{ req.requested_permission.target }}--> will be granted. <!--to
{{ req.permittee }}. {{ req.permittee }}
{% if delegatable %}<strong>will</strong>{% else %}will
<strong>not</strong>{% endif %} be able to further give permission
to other objects.
<div class="tooltip" id="tip_{{ req.id }}">
to other objects.-->
<!--<div class="tooltip" id="tip_{{ req.id }}">
{{ req.requested_permission.permission.description }}
</div>
</div>-->
<a class="perm_name" id="name_{{ req.id }}" href="#">
See details
</a>
<div class="tooltip" id="tip_{{ req.id }}">
{{ req.message }}
</div>
</li>
{% endfor %}
</ul>
{% endif %}

{% if denied_reqs %}
<h2>The following permission requests will be denied:</h2>
<!--<h2>The following permission requests will be denied:</h2>-->
<h2>The following requests will be denied:</h2>
<ul>
{% for req in denied_reqs %}
<li>
Permission
<!--Permission
<a class="perm_name" id="name_{{ req.id }}" href="#">
{{ req.requested_permission.permission.name }}
</a>
requested by {{ req.requesting_user }} for {{ req.permittee }} to
</a>-->
{{ req.requested_permission.target|title }}
requested by {{ req.requesting_user }} <!--for {{ req.permittee }} to
use object
{{ req.requested_permission.target }} will be denied.
<div class="tooltip" id="tip_{{ req.id }}">
{{ req.requested_permission.target }}--> will be denied.
<!--<div class="tooltip" id="tip_{{ req.id }}">
{{ req.requested_permission.permission.description }}
</div>
</div>-->
<a class="perm_name" id="name_{{ req.id }}" href="#">
See details
</a>
<div class="tooltip" id="tip_{{ req.id }}">
{{ req.message }}
</div>
</li>
{% endfor %}
</ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,15 +36,15 @@
});

/* code to enable/disable delegation checkbox on clicking approve */
$('input.action').click(function() {
/*$('input.action').click(function() {
req_id = $(this).attr("value");
checked = $('input.action[name=approved][value='+req_id+']').attr("checked");
if(!checked) {
$('input[name=delegate][value='+req_id+']').attr("disabled", "true");
} else {
$('input[name=delegate][value='+req_id+']').removeAttr("disabled");
}
});
});*/

/* add tooltip to permission name */
$("a.perm_name").each(function(){
Expand Down Expand Up @@ -78,7 +78,7 @@
<tr>
<th><img height="15px" src="{% url img_media 'active.png' %}" title="Approve" /></th>
<th><img height="15px" src="{% url img_media 'inactive.png' %}" title="Deny" /></th>
<th>Delegate</th>
<!--<th>Delegate</th>-->
<th>Requester</th>
<th>Permission Name</th>
<th>On Behalf Of</th>
Expand All @@ -97,10 +97,10 @@
class="action"
name="denied" value="{{ req.id }}" />
</td>
<td>
<!--<td>
<input type="checkbox" name="delegate"
value="{{ req.id }}" disabled="true" />
</td>
</td>-->
<td>
{{ req.requesting_user }}
</td>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<script type="text/javascript" src="{% url js_media 'jquery-ui.min.js' %}"></script>

<style>
img#perm_help {
img.perm_help {
width:15px;
height:15px;
}
Expand All @@ -18,12 +18,13 @@
<script>
$(document).ready(function() {
/* add tooltip to question mark */
$("img#perm_help").tooltip({
tip: "div#perm_mgmt_help",
position: "top center",
cancelDefault: true,
relative: true,
offset: [0,110]
$("img[id^=perm][id$=help_img]").tooltip({
/*tip: "div[id^=perm_][id$=_help]",*/
tip: this.id,
position: "top center",
cancelDefault: true,
relative: true,
offset: [0,110]
});
});
$(function(){
Expand All @@ -43,9 +44,11 @@ <h1>Permission Denied</h1>
to perform this action. The description of this permission is:
"{{ obj_perm.permission.description }}".
<br /><br />
If you would like to request this permission
<!--If you would like to request this permission
from a user who has the authority to give it to you, select a user
from the list below and click the "Request" button.
from the list below and click the "Request" button.-->
If you would like to exert the action associated to that permission, fill
the form with appropriate information and click the "Request" button.
</div>
<br />
<form action="" method="post">{% csrf_token %}
Expand All @@ -55,29 +58,29 @@ <h1>Permission Denied</h1>
{% if perm_name != obj_perm.permission.name or field.name != "permission_owner" %}
<tr><th colspan="2">{{ field.errors }}</th></tr>
<tr><th>{{ field.label_tag }}
{% if field.name == "message" %}
{% if obj_perm.permission.name == "can_create_project"%}
<img id="perm_help" src="{% url img_media 'question_mark_15x15.png' %}" />
<div class="tooltip" id="perm_mgmt_help">
Please provide a descriptive name and a short description of the project.
<br /><br />
Make sure you have set your afiliation in your user profile, or specify it in the message.
</div>
{% if obj_perm.permission.name == "can_create_project"%}
{% if field.name == "name" or field.name == "organization" or field.name == "message" %}
<img id="perm_{{field.name}}_help_img" src="{% url img_media 'question_mark_15x15.png' %}" />
<div class="tooltip perm_help" id="perm_{{field.name}}_help">
{% endif %}
{% if field.name == "name" %}
Provide a descriptive name for the project.
{% endif %}
{% if field.name == "organization" %}
Make sure you set your affiliation.
{% endif %}
{% if field.name == "message" %}
Provide a short description for the project.
{% endif %}
{% if field.name == "name" or field.name == "organization" or field.name == "message" %}
</div>
{% endif %}
{% endif %}
: </th><td>{{ field }}</td>
</tr>
{% endif %}
{% endfor %}
</table>
<!-- {% if obj_perm.permission.name == "can_create_project" %}
<img id="perm_help" src="{% url img_media 'question_mark_15x15.png' %}" />
<div class="tooltip" id="perm_mgmt_help">
Please provide a descriptive name and a short description of the project.
<br /><br />
Make sure you have set your afiliation in your user profile.
</div>
{% endif %} -->
<div>
<input type="submit" value="Request" />
<input type="button" onclick="javascript:document.location='{% url home %}'" value="Cancel" />
Expand Down

0 comments on commit 8e424dd

Please sign in to comment.