mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-16 07:08:55 +00:00
Merge branch 'xiez'
This commit is contained in:
@@ -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>
|
||||
|
@@ -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'取消共享失败:只有小组管理员或共享目录发布者有权取消共享')
|
||||
|
||||
|
@@ -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 <group-id> <rendevous-id></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 %}
|
@@ -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 %}
|
@@ -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>
|
||||
|
@@ -4,5 +4,6 @@
|
||||
|
||||
{% block main_panel %}
|
||||
|
||||
<h3>权限不足</h3>
|
||||
<p>{{ error_msg }}</p>
|
||||
{% endblock %}
|
||||
|
@@ -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>
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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)
|
||||
|
21
views.py
21
views.py
@@ -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)
|
||||
|
||||
|
Reference in New Issue
Block a user