1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-16 15:19:06 +00:00

Merge branch 'xiez'

This commit is contained in:
xiez
2012-05-28 16:38:03 +08:00
10 changed files with 37 additions and 119 deletions

View File

@@ -54,7 +54,7 @@
<td>
<button data="{{ repo.props.id }}" class="download-btn">下载</button>
{% if is_staff or repo.share_from_me %}
<button data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&gid={{ group.id }}" class="repo-delete-btn">取消共享</button>
<button data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&from={{ repo.share_from }}&gid={{ group.id }}" class="repo-delete-btn">取消共享</button>
{% endif %}
</td>
</tr>

View File

@@ -6,7 +6,7 @@ from django.template import RequestContext
from auth.decorators import login_required
from seaserv import ccnet_rpc, seafserv_threaded_rpc, get_repo, \
get_group_repoids
get_group_repoids, check_group_staff
from pysearpc import SearpcError
from seahub.contacts.models import Contact
@@ -53,8 +53,7 @@ def group_remove(request, group_id):
except ValueError:
return HttpResponseRedirect(reverse('group_list', args=[]))
# Check whether use is the group staff
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username):
if not check_group_staff(group_id_int, request.user):
return go_permission_error(request, u'只有小组管理员有权解散小组')
try:
@@ -100,7 +99,7 @@ def group_info(request, group_id):
if not group:
return HttpResponseRedirect(reverse('group_list', args=[]))
if ccnet_rpc.check_group_staff(group.props.id, request.user.username):
if check_group_staff(group.id, request.user):
is_staff = True
else:
is_staff = False
@@ -146,8 +145,7 @@ def group_members(request, group_id):
except ValueError:
return go_error(request, u'group id 不是有效参数')
# Check whether user is the group staff
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username):
if not check_group_staff(group_id_int, request.user):
return go_permission_error(request, u'只有小组管理员有权管理小组')
group = ccnet_rpc.get_group(group_id_int)
@@ -207,8 +205,7 @@ def group_remove_member(request, group_id, user_name):
except ValueError:
return go_error(request, u'group id 不是有效参数')
# Check whether user is the group staff
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username):
if not check_group_staff(group_id_int, request.user):
return go_permission_error(request, u'只有小组管理员有权删除成员')
if not validate_emailuser(user_name):
@@ -270,7 +267,7 @@ def group_unshare_repo(request, repo_id, group_id, from_email):
return go_error(request, u'共享失败:未加入该小组')
# Check whether user is group staff or the one share the repo
if not ccnet_rpc.check_group_staff(group_id, from_email) and \
if not check_group_staff(group_id, from_email) and \
seafserv_threaded_rpc.get_group_repo_share_from(repo_id) != from_email:
return go_permission_error(request, u'取消共享失败:只有小组管理员或共享目录发布者有权取消共享')

View File

@@ -1,77 +0,0 @@
{% extends "base.html" %}
{% block title %}Group{% endblock %}
{% block left_panel %}
<ul>
<li><a href="{{ SITE_ROOT }}group/{{ group.props.id }}/addrepo/">Add Repo</a></li>
</ul>
{% endblock %}
{% block right_panel %}
<p>Use the following command to add a group:</p>
<div><code>ccnet-tool group-follow &lt;group-id&gt; &lt;rendevous-id&gt;</code></div>
<h3>Group</h3>
<table class="default">
<tr>
<td>Name</td>
<td>{{ group.props.name }}</td>
</tr>
<tr>
<td>ID</td>
<td>{{ group.props.id }}</td>
</tr>
<tr>
<td>Timestamp</td>
<td>{{ group.props.timestamp }}</td>
</tr>
<tr>
<td>Rendezvous</td>
<td>{{ group.props.rendezvous }}</td>
</tr>
<tr>
<td>Creator</td>
<td>{{ group.props.creator }}</td>
</tr>
<tr>
<td>Maintainer</td>
<td>
{% for peer in group.maintainers %}
{{peer}}
{% endfor %}
</td>
</tr>
<tr>
<td>Members</td>
<td>
{% for peer in group.members %}
{{peer}}
{% endfor %}
</td>
</tr>
<tr>
<td>Followers</td>
<td>
{% for peer in group.followers %}
{{peer}}
{% endfor %}
</td>
</tr>
</table>
<h3>repos</h3>
<table class="default">
<tr>
<th>Repo ID</th>
</tr>
{% for item in shared_repos %}
<tr>
<td>{{ item.repo_id }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}

View File

@@ -1,22 +0,0 @@
{% extends "base.html" %}
{% block title %}Group{% endblock %}
{% block left_panel %}
{% endblock %}
{% block right_panel %}
Add repo to {{ group.props.name }}
<form action="" method="post">
{% if error_msg %}
<p class="error">{{ error_msg }}</p>
{% endif %}
<label>Repo ID:</label><br/>
{{ form.repo_id }}
<input type="submit" value="Submit" />
</form>
{% endblock %}

View File

@@ -92,7 +92,7 @@
<td>{{ repo.props.desc }}</td>
<td>
<button data="{{ repo.props.id }}" class="download-btn">下载</button>
<button data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.id }}&to_email={{ request.user }}" class="unshare-btn">取消共享</button>
<button data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.id }}&from={{ repo.shared_email }}&to={{ request.user }}" class="unshare-btn">取消共享</button>
</td>
</tr>

View File

@@ -4,5 +4,6 @@
{% block main_panel %}
<h3>权限不足</h3>
<p>{{ error_msg }}</p>
{% endblock %}

View File

@@ -19,9 +19,9 @@
<td>{{ repo.props.desc }}</td>
<td>
{% if repo.gid %}
<button data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&to_email={{ repo.props.shared_email }}&gid={{ repo.gid }}" class="cancel-share-btn">取消共享</button>
<button data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&from={{ request.user }}&gid={{ repo.gid }}" class="cancel-share-btn">取消共享</button>
{% else %}
<button data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&to_email={{ repo.props.shared_email }}" class="cancel-share-btn">取消共享</button>
<button data="{{ SITE_ROOT }}shareadmin/removeshare/?repo_id={{ repo.props.id }}&from={{ request.user }}&to={{ repo.props.shared_email }}" class="cancel-share-btn">取消共享</button>
{% endif %}
</td>
</tr>

View File

@@ -12,7 +12,7 @@ from service import get_users, get_user, get_events, count_event
from service import get_repos, get_repo, get_commits, get_branches
from service import get_binding_peerids
from service import get_ccnetuser
from service import get_group_repoids
from service import get_group_repoids, check_group_staff
from service import CCNET_CONF_PATH

View File

@@ -412,4 +412,10 @@ def get_group_repoids(group_id=None):
repoid_list.append(repo_id)
return repoid_list
def check_group_staff(group_id_int, user_or_username):
"""Check where user is group staff"""
from seahub.base.accounts import CcnetUser
if isinstance(user_or_username, CcnetUser):
user_or_username = user_or_username.username
return ccnet_rpc.check_group_staff(group_id_int, user_or_username)

View File

@@ -16,7 +16,7 @@ from auth.tokens import default_token_generator
from seaserv import ccnet_rpc, get_groups, get_users, get_repos, \
get_repo, get_commits, get_branches, \
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, get_ccnetuser, \
get_group_repoids
get_group_repoids, check_group_staff
from pysearpc import SearpcError
from seahub.base.accounts import CcnetUser
@@ -448,7 +448,8 @@ def myhome(request):
owned_repos = seafserv_threaded_rpc.list_owned_repos(email)
# Repos that are share to me
in_repos = seafserv_threaded_rpc.list_share_repos(request.user.username, 'to_email', -1, -1)
in_repos = seafserv_threaded_rpc.list_share_repos(request.user.username,
'to_email', -1, -1)
# handle share repo request
if request.method == 'POST':
@@ -681,14 +682,23 @@ def seafile_access_check(request):
@login_required
def repo_remove_share(request):
"""
If repo is shared from one person to another person, only these two peson
can remove share.
If repo is shared from one person to a group, then only the one share the
repo and group staff can remove share.
"""
repo_id = request.GET.get('repo_id', '')
group_id = request.GET.get('gid')
from_email = request.user.username
from_email = request.GET.get('from', '')
# if request params don't have 'gid', then remove repos that share to
# to other person; else, remove repos that share to groups
if not group_id:
to_email = request.GET.get('to_email', '')
to_email = request.GET.get('to', '')
if request.user.username != from_email and \
request.user.username != to_email:
return go_permission_error(request, u'取消共享失败')
seafserv_threaded_rpc.remove_share(repo_id, from_email, to_email)
else:
try:
@@ -696,6 +706,9 @@ def repo_remove_share(request):
except:
return go_error(request, u'group id 不是有效参数')
if not check_group_staff(group_id_int, request.user) \
and request.user.username != from_email:
return go_permission_error(request, u'取消共享失败')
from seahub.group.views import group_unshare_repo
group_unshare_repo(request, repo_id, group_id_int, from_email)