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>
|
<td>
|
||||||
<button data="{{ repo.props.id }}" class="download-btn">下载</button>
|
<button data="{{ repo.props.id }}" class="download-btn">下载</button>
|
||||||
{% if is_staff or repo.share_from_me %}
|
{% 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 %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@@ -6,7 +6,7 @@ from django.template import RequestContext
|
|||||||
|
|
||||||
from auth.decorators import login_required
|
from auth.decorators import login_required
|
||||||
from seaserv import ccnet_rpc, seafserv_threaded_rpc, get_repo, \
|
from seaserv import ccnet_rpc, seafserv_threaded_rpc, get_repo, \
|
||||||
get_group_repoids
|
get_group_repoids, check_group_staff
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
|
|
||||||
from seahub.contacts.models import Contact
|
from seahub.contacts.models import Contact
|
||||||
@@ -53,8 +53,7 @@ def group_remove(request, group_id):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
return HttpResponseRedirect(reverse('group_list', args=[]))
|
||||||
|
|
||||||
# Check whether use is the group staff
|
if not check_group_staff(group_id_int, request.user):
|
||||||
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username):
|
|
||||||
return go_permission_error(request, u'只有小组管理员有权解散小组')
|
return go_permission_error(request, u'只有小组管理员有权解散小组')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@@ -100,7 +99,7 @@ def group_info(request, group_id):
|
|||||||
if not group:
|
if not group:
|
||||||
return HttpResponseRedirect(reverse('group_list', args=[]))
|
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
|
is_staff = True
|
||||||
else:
|
else:
|
||||||
is_staff = False
|
is_staff = False
|
||||||
@@ -146,8 +145,7 @@ def group_members(request, group_id):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
return go_error(request, u'group id 不是有效参数')
|
return go_error(request, u'group id 不是有效参数')
|
||||||
|
|
||||||
# Check whether user is the group staff
|
if not check_group_staff(group_id_int, request.user):
|
||||||
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username):
|
|
||||||
return go_permission_error(request, u'只有小组管理员有权管理小组')
|
return go_permission_error(request, u'只有小组管理员有权管理小组')
|
||||||
|
|
||||||
group = ccnet_rpc.get_group(group_id_int)
|
group = ccnet_rpc.get_group(group_id_int)
|
||||||
@@ -207,8 +205,7 @@ def group_remove_member(request, group_id, user_name):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
return go_error(request, u'group id 不是有效参数')
|
return go_error(request, u'group id 不是有效参数')
|
||||||
|
|
||||||
# Check whether user is the group staff
|
if not check_group_staff(group_id_int, request.user):
|
||||||
if not ccnet_rpc.check_group_staff(group_id_int, request.user.username):
|
|
||||||
return go_permission_error(request, u'只有小组管理员有权删除成员')
|
return go_permission_error(request, u'只有小组管理员有权删除成员')
|
||||||
|
|
||||||
if not validate_emailuser(user_name):
|
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'共享失败:未加入该小组')
|
return go_error(request, u'共享失败:未加入该小组')
|
||||||
|
|
||||||
# Check whether user is group staff or the one share the repo
|
# 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:
|
seafserv_threaded_rpc.get_group_repo_share_from(repo_id) != from_email:
|
||||||
return go_permission_error(request, u'取消共享失败:只有小组管理员或共享目录发布者有权取消共享')
|
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>{{ repo.props.desc }}</td>
|
||||||
<td>
|
<td>
|
||||||
<button data="{{ repo.props.id }}" class="download-btn">下载</button>
|
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@@ -4,5 +4,6 @@
|
|||||||
|
|
||||||
{% block main_panel %}
|
{% block main_panel %}
|
||||||
|
|
||||||
|
<h3>权限不足</h3>
|
||||||
<p>{{ error_msg }}</p>
|
<p>{{ error_msg }}</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@@ -19,9 +19,9 @@
|
|||||||
<td>{{ repo.props.desc }}</td>
|
<td>{{ repo.props.desc }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% if repo.gid %}
|
{% 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 %}
|
{% 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 %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</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_repos, get_repo, get_commits, get_branches
|
||||||
from service import get_binding_peerids
|
from service import get_binding_peerids
|
||||||
from service import get_ccnetuser
|
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
|
from service import CCNET_CONF_PATH
|
||||||
|
|
||||||
|
@@ -412,4 +412,10 @@ def get_group_repoids(group_id=None):
|
|||||||
repoid_list.append(repo_id)
|
repoid_list.append(repo_id)
|
||||||
return repoid_list
|
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)
|
||||||
|
23
views.py
23
views.py
@@ -16,7 +16,7 @@ from auth.tokens import default_token_generator
|
|||||||
from seaserv import ccnet_rpc, get_groups, get_users, get_repos, \
|
from seaserv import ccnet_rpc, get_groups, get_users, get_repos, \
|
||||||
get_repo, get_commits, get_branches, \
|
get_repo, get_commits, get_branches, \
|
||||||
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, get_ccnetuser, \
|
seafserv_threaded_rpc, seafserv_rpc, get_binding_peerids, get_ccnetuser, \
|
||||||
get_group_repoids
|
get_group_repoids, check_group_staff
|
||||||
from pysearpc import SearpcError
|
from pysearpc import SearpcError
|
||||||
|
|
||||||
from seahub.base.accounts import CcnetUser
|
from seahub.base.accounts import CcnetUser
|
||||||
@@ -448,7 +448,8 @@ def myhome(request):
|
|||||||
owned_repos = seafserv_threaded_rpc.list_owned_repos(email)
|
owned_repos = seafserv_threaded_rpc.list_owned_repos(email)
|
||||||
|
|
||||||
# Repos that are share to me
|
# 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
|
# handle share repo request
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
@@ -681,21 +682,33 @@ def seafile_access_check(request):
|
|||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def repo_remove_share(request):
|
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', '')
|
repo_id = request.GET.get('repo_id', '')
|
||||||
group_id = request.GET.get('gid')
|
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
|
# if request params don't have 'gid', then remove repos that share to
|
||||||
# to other person; else, remove repos that share to groups
|
# to other person; else, remove repos that share to groups
|
||||||
if not group_id:
|
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)
|
seafserv_threaded_rpc.remove_share(repo_id, from_email, to_email)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
group_id_int = int(group_id)
|
group_id_int = int(group_id)
|
||||||
except:
|
except:
|
||||||
return go_error(request, u'group id 不是有效参数')
|
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
|
from seahub.group.views import group_unshare_repo
|
||||||
group_unshare_repo(request, repo_id, group_id_int, from_email)
|
group_unshare_repo(request, repo_id, group_id_int, from_email)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user