1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-02 07:27:04 +00:00

Change account context storage from cache to session

This commit is contained in:
xiez
2012-08-02 17:50:16 +08:00
parent 081dba22c3
commit 8f93238acc
14 changed files with 53 additions and 66 deletions

View File

@@ -1,16 +1,12 @@
from seahub.utils import get_cur_ctx
def org(request): def org(request):
""" """
Add org info and base template that html page will extends to context. Add org info and base template that html page will extends to context.
""" """
if hasattr(request.user, 'org') and request.user.org is not None: ctx_dict = get_cur_ctx(request)
if request.user.org['is_staff']: base_template = ctx_dict['base_template']
base_template = 'org_admin_base.html' org_dict = ctx_dict['org_dict']
else: return {'base_template': base_template,
base_template = 'org_base.html' 'org': org_dict}
return {'cur_ctx': 'org',
'org': request.user.org,
'base_template': base_template}
else:
return {'cur_ctx': '',
'base_template': 'myhome_base.html'}

View File

@@ -3,11 +3,11 @@ from django.http import HttpResponseRedirect
from seaserv import get_org_by_url_prefix, get_orgs_by_user from seaserv import get_org_by_url_prefix, get_orgs_by_user
from settings import ORG_CACHE_PREFIX
try: try:
from seahub.settings import CLOUD_MODE from seahub.settings import CLOUD_MODE
except ImportError: except ImportError:
CLOUD_MODE = False CLOUD_MODE = False
from seahub.utils import get_cur_ctx
class OrganizationMiddleware(object): class OrganizationMiddleware(object):
""" """
@@ -20,8 +20,8 @@ class OrganizationMiddleware(object):
request.cloud_mode = True request.cloud_mode = True
# Get current org context # Get current org context
org = cache.get(ORG_CACHE_PREFIX + request.user.username) ctx_dict = get_cur_ctx(request)
request.user.org = org request.user.org = ctx_dict.get('org_dict', None)
# Get all orgs user created. # Get all orgs user created.
orgs = get_orgs_by_user(request.user.username) orgs = get_orgs_by_user(request.user.username)

View File

@@ -1,3 +1 @@
from django.conf import settings from django.conf import settings
ORG_CACHE_PREFIX = getattr(settings, 'ORG_CACHE_PREFIX', 'ORGANIZATION_')

View File

@@ -46,7 +46,7 @@
{% if repo.latest_modify %} {% if repo.latest_modify %}
<td>{{ repo.latest_modify|translate_commit_time }}</td> <td>{{ repo.latest_modify|translate_commit_time }}</td>
{% else %} {% else %}
<td>—— ——</td> <td>--</td>
{% endif %} {% endif %}
<td> <td>
<img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" /> <img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" />

View File

@@ -35,7 +35,7 @@
<td><a href="{% url user_profile user.email %}">{{ user.props.email }}</a></td> <td><a href="{% url user_profile user.email %}">{{ user.props.email }}</a></td>
<td> <td>
{% if not user.is_self %} {% if not user.is_self %}
<button class="remove-user-btn" data="{% url org_user_remove org.url_prefix user.email %}">删除</button> <button class="remove-user-btn" data="{% url org_user_remove request.user.org.url_prefix user.email %}">删除</button>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>

View File

@@ -1,23 +1,7 @@
import sys import sys
from django.core.cache import cache
from settings import ORG_CACHE_PREFIX
from seaserv import get_org_id_by_repo_id from seaserv import get_org_id_by_repo_id
def clear_org_ctx(request):
"""
Clear current context.
"""
cache.delete(ORG_CACHE_PREFIX + request.user.username)
request.user.org = None
def set_org_ctx(request, org_dict):
"""
Set current context to org.
"""
cache.set(ORG_CACHE_PREFIX + request.user.username, org_dict, sys.maxint)
request.user.org = org_dict
def access_org_repo(request, repo_id): def access_org_repo(request, repo_id):
""" """
Check whether user can view org repo. Check whether user can view org repo.
@@ -28,6 +12,3 @@ def access_org_repo(request, repo_id):
cur_org_id = request.user.org['org_id'] cur_org_id = request.user.org['org_id']
org_id = get_org_id_by_repo_id(repo_id) org_id = get_org_id_by_repo_id(repo_id)
return True if cur_org_id == org_id else False return True if cur_org_id == org_id else False

View File

@@ -19,14 +19,12 @@ from seaserv import ccnet_threaded_rpc, get_orgs_by_user, get_org_repos, \
from forms import OrgCreateForm from forms import OrgCreateForm
from signals import org_user_added from signals import org_user_added
from settings import ORG_CACHE_PREFIX
from utils import set_org_ctx
from notifications.models import UserNotification from notifications.models import UserNotification
from registration.models import RegistrationProfile from registration.models import RegistrationProfile
from seahub.forms import RepoCreateForm from seahub.forms import RepoCreateForm
import seahub.settings as seahub_settings import seahub.settings as seahub_settings
from seahub.utils import render_error, render_permission_error, validate_group_name, \ from seahub.utils import render_error, render_permission_error, gen_token, \
emails2list, gen_token validate_group_name, emails2list, set_cur_ctx, calculate_repo_last_modify
from seahub.views import myhome from seahub.views import myhome
@login_required @login_required
@@ -65,11 +63,15 @@ def org_info(request, url_prefix):
if not org: if not org:
return HttpResponseRedirect(reverse(myhome)) return HttpResponseRedirect(reverse(myhome))
set_org_ctx(request, org._dict) ctx_dict = {'base_template': 'org_base.html',
'org_dict': org._dict}
set_cur_ctx(request, ctx_dict)
org_members = ccnet_threaded_rpc.get_org_emailusers(url_prefix, org_members = ccnet_threaded_rpc.get_org_emailusers(url_prefix,
0, sys.maxint) 0, sys.maxint)
repos = get_org_repos(org.org_id, 0, sys.maxint) repos = get_org_repos(org.org_id, 0, sys.maxint)
calculate_repo_last_modify(repos)
repos.sort(lambda x, y: cmp(y.latest_modify, x.latest_modify))
url = 'organizations/%s/repo/create/' % org.url_prefix url = 'organizations/%s/repo/create/' % org.url_prefix
return render_to_response('organizations/org_info.html', { return render_to_response('organizations/org_info.html', {
@@ -139,6 +141,10 @@ def org_useradmin(request, url_prefix):
if not request.user.org['is_staff']: if not request.user.org['is_staff']:
raise Http404 raise Http404
ctx_dict = {'base_template': 'org_admin_base.html',
'org_dict': request.user.org}
set_cur_ctx(request, ctx_dict)
if request.method == 'POST': if request.method == 'POST':
emails = request.POST.get('added-member-name') emails = request.POST.get('added-member-name')

View File

@@ -1,5 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block top_bar_manager_class %} class="cur"{% endblock %} {% block top_bar_sys_manager_class %} class="cur"{% endblock %}
{% block nav %} {% block nav %}
<ul class="nav"> <ul class="nav">
{% if request.user.is_staff %} {% if request.user.is_staff %}

View File

@@ -41,19 +41,14 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if request.user.is_staff or request.user.org.is_staff %}
{% if request.user.is_staff %} {% if request.user.is_staff %}
<a href="{{ SITE_ROOT }}sys/useradmin/" <a href="{{ SITE_ROOT }}sys/useradmin/"{% block top_bar_sys_manager_class %}{% endblock %}>系统管理</a>
{% else %} <a href="{{ SITE_ROOT }}home/my/"{% block top_bar_myaccount_class %}{% endblock %}>个人工作台</a>
<a href="{% url org_useradmin request.user.org.url_prefix %}"
{% endif %} {% endif %}
{% block top_bar_manager_class %}{% endblock %}>管理员工作台</a>
{% if request.user.is_staff %} {% if request.user.org.is_staff %}
<a href="{{ SITE_ROOT }}home/my/" <a href="{% url org_useradmin request.user.org.url_prefix %}"{% block top_bar_org_manager_class %}{% endblock %}>管理员工作台</a>
{% else %} <a href="{% url organizations.views.org_info request.user.org.url_prefix %}"{% block top_bar_org_myaccount_class %}{% endblock %}>个人工作台</a>
<a href="{% url organizations.views.org_info org.url_prefix %}"
{% endif %}
{% block top_bar_myaccount_class %}{% endblock %}>个人工作台</a>
{% endif %} {% endif %}
</div> </div>

View File

@@ -116,7 +116,7 @@
{% if repo.latest_modify %} {% if repo.latest_modify %}
<td>{{ repo.latest_modify|translate_commit_time }}</td> <td>{{ repo.latest_modify|translate_commit_time }}</td>
{% else %} {% else %}
<td>—— ——</td> <td>--</tdb>
{% endif %} {% endif %}
<td> <td>
<img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" /> <img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" />
@@ -147,7 +147,7 @@
{% if repo.latest_modify %} {% if repo.latest_modify %}
<td>{{ repo.latest_modify|translate_commit_time }}</td> <td>{{ repo.latest_modify|translate_commit_time }}</td>
{% else %} {% else %}
<td>—— ——</td> <td>--</td>
{% endif %} {% endif %}
<td> <td>
<img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" /> <img src="{{ MEDIA_URL }}img/sync-20.png" data="{{ repo.props.id }}" class="download-btn vh" title="同步到本地" alt="同步" />

View File

@@ -1,5 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block top_bar_manager_class %} class="cur"{% endblock %} {% block top_bar_org_manager_class %} class="cur"{% endblock %}
{% block nav %} {% block nav %}
<ul class="nav"> <ul class="nav">
{% if request.user.org.is_staff %} {% if request.user.org.is_staff %}

View File

@@ -1,5 +1,5 @@
{% extends "base.html" %} {% extends "base.html" %}
{% block top_bar_myaccount_class %} class="cur"{% endblock %} {% block top_bar_org_myaccount_class %} class="cur"{% endblock %}
{% block nav %} {% block nav %}
<ul class="nav"> <ul class="nav">
<li> <li>

View File

@@ -313,3 +313,13 @@ def emails2list(emails):
s.add(e) s.add(e)
return [ x for x in s ] return [ x for x in s ]
def get_cur_ctx(request):
ctx_dict = request.session.get('current_context', {
'base_template': 'myhome_base.html',
'org_dict': None})
return ctx_dict
def set_cur_ctx(request, ctx_dict):
request.session['current_context'] = ctx_dict
request.user.org = ctx_dict.get('org_dict', None)

View File

@@ -40,14 +40,14 @@ from seahub.base.models import UuidObjidMap
from seahub.contacts.models import Contact from seahub.contacts.models import Contact
from seahub.contacts.signals import mail_sended from seahub.contacts.signals import mail_sended
from seahub.notifications.models import UserNotification from seahub.notifications.models import UserNotification
from seahub.organizations.utils import clear_org_ctx, access_org_repo from seahub.organizations.utils import access_org_repo
from forms import AddUserForm, FileLinkShareForm, RepoCreateForm from forms import AddUserForm, FileLinkShareForm, RepoCreateForm
from utils import render_permission_error, render_error, list_to_string, \ from utils import render_permission_error, render_error, list_to_string, \
get_httpserver_root, get_ccnetapplet_root, gen_token, \ get_httpserver_root, get_ccnetapplet_root, gen_token, \
calculate_repo_last_modify, valid_previewed_file, \ calculate_repo_last_modify, valid_previewed_file, \
check_filename_with_rename, get_accessible_repos, EMPTY_SHA1, \ check_filename_with_rename, get_accessible_repos, EMPTY_SHA1, \
get_file_revision_id_size, get_ccnet_server_addr_port, \ get_file_revision_id_size, get_ccnet_server_addr_port, \
gen_file_get_url, emails2list gen_file_get_url, emails2list, set_cur_ctx
from seahub.profile.models import Profile from seahub.profile.models import Profile
try: try:
from settings import CROCODOC_API_TOKEN from settings import CROCODOC_API_TOKEN
@@ -701,8 +701,9 @@ def myhome(request):
profile = Profile.objects.filter(user=request.user.username)[0] profile = Profile.objects.filter(user=request.user.username)[0]
nickname = profile.nickname nickname = profile.nickname
# clear org context in cache and set request.user.org to None ctx_dict = {'base_template': 'myhome_base.html',
clear_org_ctx(request) 'org_dict': None}
set_cur_ctx(request, ctx_dict)
return render_to_response('myhome.html', { return render_to_response('myhome.html', {
"myname": email, "myname": email,