mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-20 19:08:21 +00:00
Refactor user role
This commit is contained in:
@@ -4,6 +4,7 @@ from rest_framework.authentication import BaseAuthentication
|
||||
|
||||
import seaserv
|
||||
from seahub.base.accounts import User
|
||||
from seahub.constants import GUEST_USER
|
||||
from seahub.api2.models import Token, TokenV2
|
||||
from seahub.api2.utils import get_client_ip
|
||||
try:
|
||||
@@ -54,6 +55,14 @@ class TokenAuthentication(BaseAuthentication):
|
||||
|
||||
return self.authenticate_v1(request, key)
|
||||
|
||||
def _populate_user_permissions(self, user):
|
||||
"""Disable some operations if ``user`` is a guest.
|
||||
"""
|
||||
if user.role == GUEST_USER:
|
||||
user.permissions.can_add_repo = lambda: False
|
||||
user.permissions.can_add_group = lambda: False
|
||||
user.permissions.can_view_org = lambda: False
|
||||
|
||||
def authenticate_v1(self, request, key):
|
||||
try:
|
||||
token = Token.objects.get(key=key)
|
||||
@@ -70,6 +79,8 @@ class TokenAuthentication(BaseAuthentication):
|
||||
if orgs:
|
||||
user.org = orgs[0]
|
||||
|
||||
self._populate_user_permissions(user)
|
||||
|
||||
if user.is_active:
|
||||
return (user, token)
|
||||
|
||||
@@ -89,6 +100,8 @@ class TokenAuthentication(BaseAuthentication):
|
||||
if orgs:
|
||||
user.org = orgs[0]
|
||||
|
||||
self._populate_user_permissions(user)
|
||||
|
||||
if user.is_active:
|
||||
need_save = False
|
||||
|
||||
|
@@ -478,34 +478,39 @@ class Repos(APIView):
|
||||
repo["random_key"] = r.random_key
|
||||
repos_json.append(repo)
|
||||
|
||||
public_repos = list_inner_pub_repos(request)
|
||||
for r in public_repos:
|
||||
commit = get_commits(r.repo_id, 0, 1)[0]
|
||||
if not commit:
|
||||
continue
|
||||
r.root = commit.root_id
|
||||
r.size = server_repo_size(r.repo_id)
|
||||
repo = {
|
||||
"type": "grepo",
|
||||
"id": r.repo_id,
|
||||
"name": r.repo_name,
|
||||
"desc": r.repo_desc,
|
||||
"owner": "Organization",
|
||||
"mtime": r.last_modified,
|
||||
"root": r.root,
|
||||
"size": r.size,
|
||||
"encrypted": r.encrypted,
|
||||
"permission": r.permission,
|
||||
if request.user.permissions.can_view_org():
|
||||
public_repos = list_inner_pub_repos(request)
|
||||
for r in public_repos:
|
||||
commit = get_commits(r.repo_id, 0, 1)[0]
|
||||
if not commit:
|
||||
continue
|
||||
r.root = commit.root_id
|
||||
r.size = server_repo_size(r.repo_id)
|
||||
repo = {
|
||||
"type": "grepo",
|
||||
"id": r.repo_id,
|
||||
"name": r.repo_name,
|
||||
"desc": r.repo_desc,
|
||||
"owner": "Organization",
|
||||
"mtime": r.last_modified,
|
||||
"root": r.root,
|
||||
"size": r.size,
|
||||
"encrypted": r.encrypted,
|
||||
"permission": r.permission,
|
||||
}
|
||||
if r.encrypted:
|
||||
repo["enc_version"] = commit.enc_version
|
||||
repo["magic"] = commit.magic
|
||||
repo["random_key"] = commit.random_key
|
||||
repos_json.append(repo)
|
||||
if r.encrypted:
|
||||
repo["enc_version"] = commit.enc_version
|
||||
repo["magic"] = commit.magic
|
||||
repo["random_key"] = commit.random_key
|
||||
repos_json.append(repo)
|
||||
|
||||
return Response(repos_json)
|
||||
|
||||
def post(self, request, format=None):
|
||||
if not request.user.permissions.can_add_repo():
|
||||
return api_error(status.HTTP_403_FORBIDDEN,
|
||||
'You do not have permission to create library.')
|
||||
|
||||
username = request.user.username
|
||||
repo_name = request.POST.get("name", None)
|
||||
repo_desc = request.POST.get("desc", 'new repo')
|
||||
@@ -1853,6 +1858,10 @@ class DirSubRepoView(APIView):
|
||||
if sub_repo:
|
||||
result['sub_repo_id'] = sub_repo.id
|
||||
else:
|
||||
if not request.user.permissions.can_add_repo():
|
||||
return api_error(status.HTTP_403_FORBIDDEN,
|
||||
'You do not have permission to create library.')
|
||||
|
||||
# create a sub-lib
|
||||
try:
|
||||
# use name as 'repo_name' & 'repo_desc' for sub_repo
|
||||
@@ -2262,6 +2271,10 @@ class DefaultRepoView(APIView):
|
||||
return Response(repo_json)
|
||||
|
||||
def post(self, request):
|
||||
if not request.user.permissions.can_add_repo():
|
||||
return api_error(status.HTTP_403_FORBIDDEN,
|
||||
'You do not have permission to create library.')
|
||||
|
||||
username = request.user.username
|
||||
|
||||
repo_id = UserOptions.objects.get_default_repo(username)
|
||||
@@ -2541,6 +2554,10 @@ class Groups(APIView):
|
||||
result = {}
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
if not request.user.permissions.can_add_group():
|
||||
return api_error(status.HTTP_403_FORBIDDEN,
|
||||
'You do not have permission to create group.')
|
||||
|
||||
# check plan
|
||||
num_of_groups = getattr(request.user, 'num_of_groups', -1)
|
||||
if num_of_groups > 0:
|
||||
|
@@ -14,6 +14,10 @@ from seaserv import ccnet_threaded_rpc, unset_repo_passwd, is_passwd_set
|
||||
|
||||
from seahub.profile.models import Profile, DetailedProfile
|
||||
from seahub.utils import is_valid_username
|
||||
try:
|
||||
from seahub.settings import CLOUD_MODE
|
||||
except ImportError:
|
||||
CLOUD_MODE = False
|
||||
|
||||
|
||||
UNUSABLE_PASSWORD = '!' # This will never be a valid hash
|
||||
@@ -83,6 +87,22 @@ class UserManager(object):
|
||||
|
||||
return user
|
||||
|
||||
class UserPermissions(object):
|
||||
def can_add_repo(self):
|
||||
"""
|
||||
"""
|
||||
return True
|
||||
|
||||
def can_add_group(self):
|
||||
"""
|
||||
"""
|
||||
return True
|
||||
|
||||
def can_view_org(self):
|
||||
"""
|
||||
"""
|
||||
return False if CLOUD_MODE else True
|
||||
|
||||
class User(object):
|
||||
is_staff = False
|
||||
is_active = False
|
||||
@@ -97,6 +117,7 @@ class User(object):
|
||||
def __init__(self, email):
|
||||
self.username = email
|
||||
self.email = email
|
||||
self.permissions = UserPermissions()
|
||||
|
||||
def __unicode__(self):
|
||||
return self.username
|
||||
|
@@ -32,16 +32,6 @@ try:
|
||||
except ImportError:
|
||||
MULTI_TENANCY = False
|
||||
|
||||
try:
|
||||
from seahub.constants import DEFAULT_USER
|
||||
except ImportError:
|
||||
DEFAULT_USER = 'default'
|
||||
|
||||
try:
|
||||
from seahub.constants import GUEST_USER
|
||||
except ImportError:
|
||||
GUEST_USER= 'guest'
|
||||
|
||||
def base(request):
|
||||
"""
|
||||
Add seahub base configure to the context.
|
||||
@@ -85,6 +75,4 @@ def base(request):
|
||||
'sysadmin_extra_enabled': ENABLE_SYSADMIN_EXTRA,
|
||||
'grps': grps,
|
||||
'multi_tenancy': MULTI_TENANCY,
|
||||
'default_user': DEFAULT_USER,
|
||||
'guest_user': GUEST_USER,
|
||||
}
|
||||
|
@@ -1,8 +1,5 @@
|
||||
# Default user have common operations,
|
||||
# like creating group and library.
|
||||
DEFUALT_USER = 'default'
|
||||
# Default user have common operations, like creating group and library.
|
||||
DEFAULT_USER = 'default'
|
||||
|
||||
# Guest user have limited operations,
|
||||
# can not create group and library.
|
||||
# Guest user have limited operations, can not create group and library.
|
||||
GUEST_USER = 'guest'
|
||||
|
||||
|
@@ -11,7 +11,7 @@
|
||||
<li class="tab"><a href="#grp-repos" class="a">{% trans "Libraries" %}</a></li>
|
||||
<li class="tab long-tab"><a href="#grp-repos-commits" class="a">{% trans "Recent Changes" %}</a></li>
|
||||
</ul>
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
<button id="repo-create" class="fright"><img src="{{ MEDIA_URL }}img/add.png" alt="" class="add vam" /><span class="vam">{% trans "New Library" %}</span></button>
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -121,7 +121,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
{% include "snippets/repo_create_form.html" %}
|
||||
{% endif %}
|
||||
|
||||
@@ -157,7 +157,7 @@ $('.download').click(function() {
|
||||
window.open('{{ SITE_ROOT }}seafile_access_check/?repo_id=' + e(repo_id));
|
||||
});
|
||||
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
function repoCreateSuccessCallback() {
|
||||
location.reload();
|
||||
}
|
||||
|
@@ -15,7 +15,7 @@
|
||||
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_group %}
|
||||
{% url 'group_add' as group_add_url %}
|
||||
{% with post_url=group_add_url %}
|
||||
{% include "snippets/group_add_js.html" %}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
<div class="info-item">
|
||||
<h3 class="info-item-top">{% trans "Tips" %}</h3>
|
||||
<div class="info-item-bottom">
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_group %}
|
||||
<p class="not-last">{% trans "After creating a group, you can add members and share libraries into it." %}</p>
|
||||
{% else %}
|
||||
<p class="not-last">{% trans "Since you are a guest user now, you can not create groups." %}</p>
|
||||
|
@@ -2,7 +2,7 @@
|
||||
{% load url from future %}
|
||||
|
||||
<h3>{% trans "My Groups" %}</h3>
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_group %}
|
||||
<button id="group-add"><img src="{{ MEDIA_URL }}img/add.png" alt="" class="add vam" /><span class="vam">{% trans "New Group" %}</span></button>
|
||||
{% endif %}
|
||||
{% if joined_groups %}
|
||||
@@ -28,14 +28,14 @@
|
||||
{% else %}
|
||||
<div class="empty-tips">
|
||||
<h2 class="alc">{% trans "You are not in any groups" %}</h2>
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_group %}
|
||||
<p>{% blocktrans %}Group is a place for you and your friends leaving messages and collaborating on libraries. You can create a group by clicking "New Group" button.{% endblocktrans %}</p>
|
||||
{% else %}
|
||||
<p>{% trans "Group is a place for you and your friends leaving messages and collaborating on libraries. Groups you join will be listed here." %}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_group %}
|
||||
<form id="group-add-form" action="" method="post" name="group-add-form" class="hide">{% csrf_token %}
|
||||
<h3>{% trans "New Group" %}</h3>
|
||||
<label>{% trans "Group Name" %}</label><br />
|
||||
|
@@ -156,6 +156,12 @@ def group_add(request):
|
||||
result = {}
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
user_can_add_group = request.user.permissions.can_add_group()
|
||||
if not user_can_add_group:
|
||||
result['error'] = _(u'You do not have permission to create group.')
|
||||
return HttpResponse(json.dumps(result), status=403,
|
||||
content_type=content_type)
|
||||
|
||||
# check plan
|
||||
num_of_groups = getattr(request.user, 'num_of_groups', -1)
|
||||
if num_of_groups > 0:
|
||||
|
@@ -9,7 +9,7 @@
|
||||
<ul class="side-textnav-tabs">
|
||||
<li class="tab"><a href="#user-basic-info">{% trans "Profile" %}</a></li>
|
||||
<li class="tab"><a href="#lang-setting">{% trans "Language" %}</a></li>
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
{% if not force_server_crypto %}
|
||||
<li class="tab"><a href="#enc-lib-setting">{% trans "Encrypted Libraries" %}</a></li>
|
||||
{% endif %}
|
||||
@@ -74,7 +74,7 @@
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
|
||||
{% if not force_server_crypto %}
|
||||
<div class="setting-item" id="enc-lib-setting">
|
||||
@@ -145,7 +145,7 @@ addConfirmTo($('#account-delete-btn'), {
|
||||
'con' : "{% trans "Really want to delete your account?" %}"
|
||||
});
|
||||
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
var all_repos = [];
|
||||
{% for a_repo in owned_repos %}
|
||||
all_repos.push({
|
||||
|
@@ -425,6 +425,8 @@ ENABLE_PUBFILE = False
|
||||
|
||||
ENABLE_SUB_LIBRARY = True
|
||||
|
||||
ENABLE_GUEST = False
|
||||
|
||||
#####################
|
||||
# External settings #
|
||||
#####################
|
||||
|
@@ -10,7 +10,7 @@
|
||||
<div id="tabs" class="tab-tabs">
|
||||
<ul class="tab-tabs-nav hd w100 ovhd">
|
||||
<li class="tab"><a href="#priv-share-in" class="a">{% trans "From Others" %}</a></li>
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
<li class="tab long-tab"><a href="#priv-share-out" class="a">{% trans "To Others" %}</a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
@@ -47,7 +47,7 @@
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
<div id="priv-share-out" class="hide">
|
||||
{% if priv_share_out %}
|
||||
<table>
|
||||
|
@@ -6,7 +6,7 @@
|
||||
<div class="side-tabnav">
|
||||
<div class="hd w100 ovhd">
|
||||
<h3 class="fleft">{% trans "Personal" %}</h3>
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
<img id="enable-mods" class="fright" title="{% trans "Enable Modules" %}" src="{{MEDIA_URL}}img/setting.png" alt="" />
|
||||
{% endif %}
|
||||
</div>
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
<h3 class="hd">{% trans "Share Admin" %}</h3>
|
||||
<ul class="side-tabnav-tabs">
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
<li class="tab {% block cur_share_libs %}{% endblock %}"><a href="{% url 'share_admin' %}" class="lib">{% trans "Libraries" %}</a></li>
|
||||
<li class="tab {% block cur_share_folders %}{% endblock %}"><a href="{% url 'list_priv_shared_folders' %}" class="folders">{% trans "Folders" %}</a></li>
|
||||
{% endif %}
|
||||
@@ -39,7 +39,7 @@
|
||||
{% endblock %}
|
||||
|
||||
{% block main_panel %}
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
<form id="mods-enable-form" method="post" action="{% url 'toggle_modules' %}" class="hide">{% csrf_token%}
|
||||
<h3>{% trans "Enable Modules"%}</h3>
|
||||
<ul>
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
{% block extra_script %}
|
||||
<script type="text/javascript">
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
$('#enable-mods').click(function() {
|
||||
$('#mods-enable-form').modal({appendTo: "#main"});
|
||||
$('#simplemodal-container').css('height', 'auto');
|
||||
|
@@ -38,7 +38,7 @@
|
||||
<span class="icon-lightbulb fleft"></span>
|
||||
<div class="txt">
|
||||
<h3>{% trans "Welcome to Seafile!" %}</h3>
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
<p>{% trans "Seafile organizes files into libraries. Each library can be synced and shared separately. We have created a personal library for you. You can create more libraries later." %}</p>
|
||||
{% else %}
|
||||
<p>{% trans "Seafile organizes files into libraries. Each library can be synced and shared separately. Howerver, since you are a guest user now, you can not create libraries." %}</p>
|
||||
|
@@ -8,13 +8,11 @@
|
||||
<li class="nav-item" {% if grps %}style="position:relative;"{% endif %}>
|
||||
<a href="{% url 'group_list' %}" class="a {% block cur_group %}{% endblock %}" {% if grps %}id="top-nav-grp"{% endif %}>{% trans "Groups" %}{% if grps %} <span class="icon-caret-down"></span>{% endif %}</a>
|
||||
</li>
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if request.user.org or not cloud_mode %}
|
||||
{% if user.permissions.can_view_org %}
|
||||
<li class="nav-item">
|
||||
<a href="{% url 'pubrepo' %}" class="a {% block cur_pubinfo %}{% endblock %}">{% trans "Organization" %}</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<li class="nav-item">
|
||||
<a href="{{ SITE_ROOT }}help/" class="a {% block cur_help %}{% endblock %}">{% trans "Help" %}</a>
|
||||
</li>
|
||||
|
@@ -3,12 +3,12 @@
|
||||
<div id="tabs" class="tab-tabs">
|
||||
<div class="hd ovhd">
|
||||
<ul class="tab-tabs-nav fleft">
|
||||
{% if request.user.role == default_user or request.user.role == None %}
|
||||
{% if user.permissions.can_add_repo %}
|
||||
<li class="tab"><a href="#my-own-repos" class="a" id="mylib-tab">{% trans "Mine" %}</a></li>
|
||||
{% if ENABLE_SUB_LIBRARY and sub_lib_enabled %}
|
||||
<li class="tab"><a href="#my-sub-repos" class="a" id="sublib-tab">{% trans "Sub-libraries" %}</a></li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<li class="tab"><a href="#repos-shared-to-me" class="a" id="shared-lib-tab">{% trans "Shared" %}</a></li>
|
||||
<li class="tab"><a href="#group-repos" class="a" id="grp-lib-tab">{% trans "Group" %}</a></li>
|
||||
</ul>
|
||||
|
@@ -48,7 +48,7 @@
|
||||
</tr>
|
||||
|
||||
{% for user in admin_users %}
|
||||
<tr>
|
||||
<tr data-userid="{{user.email}}">
|
||||
<td data="{{user.id}}"><a href="{{ SITE_ROOT }}useradmin/info/{{ user.props.email }}/">{{ user.email }}</a></td>
|
||||
|
||||
<td>
|
||||
@@ -71,16 +71,16 @@
|
||||
<td>
|
||||
{% if user.source != 'LDAP' %}
|
||||
<div class="user-role">
|
||||
{% if user.role == default_user or user.role == None %}
|
||||
<span class="user-role-cur-value">{% trans "Default" %}</span>
|
||||
{% else %}
|
||||
{% if user.is_guest %}
|
||||
<span class="user-role-cur-value">{% trans "Guest" %}</span>
|
||||
{% else %}
|
||||
<span class="user-role-cur-value">{% trans "Default" %}</span>
|
||||
{% endif %}
|
||||
<img src="{{MEDIA_URL}}img/edit_12.png" alt="{% trans "Edit"%}" title="{% trans "Edit"%}" class="user-role-edit-icon cspt vh" />
|
||||
</div>
|
||||
<select name="role" class="user-role-select hide">
|
||||
<option value={{default_user}} {%if user.role == default_user or user.role == None %}selected="selected"{% endif %}>{% trans "Default" %}</option>
|
||||
<option value={{guest_user}} {%if user.role == guest_user %}selected="selected"{% endif %}>{% trans "Guest"%}</option>
|
||||
<option value={{default_user}} {%if not user.is_guest %}selected="selected"{% endif %}>{% trans "Default" %}</option>
|
||||
<option value={{guest_user}} {%if user.is_guest %}selected="selected"{% endif %}>{% trans "Guest"%}</option>
|
||||
</select>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
@@ -10,7 +10,7 @@
|
||||
</tr>
|
||||
|
||||
{% for user in users %}
|
||||
<tr data-userid="{{user.id}}">
|
||||
<tr data-userid="{{user.email}}">
|
||||
<td><a href="{{ SITE_ROOT }}useradmin/info/{{ user.props.email }}/">{{ user.email }}</a></td>
|
||||
<td>
|
||||
{% if user.source != 'LDAP' %}
|
||||
@@ -31,16 +31,16 @@
|
||||
<td>
|
||||
{% if user.source != 'LDAP' %}
|
||||
<div class="user-role">
|
||||
{% if user.role == default_user or user.role == None %}
|
||||
<span class="user-role-cur-value">{% trans "Default" %}</span>
|
||||
{% else %}
|
||||
{% if user.is_guest %}
|
||||
<span class="user-role-cur-value">{% trans "Guest" %}</span>
|
||||
{% else %}
|
||||
<span class="user-role-cur-value">{% trans "Default" %}</span>
|
||||
{% endif %}
|
||||
<img src="{{MEDIA_URL}}img/edit_12.png" alt="{% trans "Edit"%}" title="{% trans "Edit"%}" class="user-role-edit-icon cspt vh" />
|
||||
</div>
|
||||
<select name="role" class="user-role-select hide">
|
||||
<option value={{default_user}} {%if user.role == default_user or user.role == None %}selected="selected"{% endif %}>{% trans "Default" %}</option>
|
||||
<option value={{guest_user}} {%if user.role == guest_user %}selected="selected"{% endif %}>{% trans "Guest"%}</option>
|
||||
<option value={{default_user}} {%if not user.is_guest %}selected="selected"{% endif %}>{% trans "Default" %}</option>
|
||||
<option value={{guest_user}} {%if user.is_guest %}selected="selected"{% endif %}>{% trans "Guest"%}</option>
|
||||
</select>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
@@ -193,7 +193,7 @@ urlpatterns = patterns('',
|
||||
url(r'^useradmin/activate/(?P<user_id>[^/]+)/$', user_activate, name='user_activate'),
|
||||
url(r'^useradmin/deactivate/(?P<user_id>[^/]+)/$', user_deactivate, name='user_deactivate'),
|
||||
url(r'^useradmin/toggle_status/(?P<user_id>[^/]+)/$', user_toggle_status, name='user_toggle_status'),
|
||||
url(r'^useradmin/toggle_role/(?P<user_id>[^/]+)/$', user_toggle_role, name='user_toggle_role'),
|
||||
url(r'^useradmin/toggle_role/(?P<email>[^/]+)/$', user_toggle_role, name='user_toggle_role'),
|
||||
url(r'^useradmin/(?P<email>[^/]+)/set_quota/$', user_set_quota, name='user_set_quota'),
|
||||
|
||||
url(r'^useradmin/password/reset/(?P<user_id>[^/]+)/$', user_reset, name='user_reset'),
|
||||
|
@@ -975,14 +975,13 @@ def myhome(request):
|
||||
allow_public_share = True
|
||||
|
||||
# user guide
|
||||
from seahub import constants
|
||||
DEFAULT_USER = getattr(constants, 'DEFAULT_USER', 'default')
|
||||
user_can_add_repo = request.user.permissions.can_add_repo()
|
||||
need_guide = False
|
||||
if len(owned_repos) == 0:
|
||||
need_guide = UserOptions.objects.is_user_guide_enabled(username)
|
||||
if need_guide:
|
||||
UserOptions.objects.disable_user_guide(username)
|
||||
if request.user.role == DEFAULT_USER or request.user.role == None:
|
||||
if user_can_add_repo:
|
||||
# create a default library for user
|
||||
create_default_library(request)
|
||||
# refetch owned repos
|
||||
@@ -1550,6 +1549,9 @@ def pubrepo(request):
|
||||
"""
|
||||
Show public libraries.
|
||||
"""
|
||||
if not request.user.permissions.can_view_org():
|
||||
raise Http404
|
||||
|
||||
username = request.user.username
|
||||
|
||||
if request.cloud_mode and request.user.org is not None:
|
||||
@@ -1580,6 +1582,9 @@ def pubgrp(request):
|
||||
"""
|
||||
Show public groups.
|
||||
"""
|
||||
if not request.user.permissions.can_view_org():
|
||||
raise Http404
|
||||
|
||||
if request.cloud_mode and request.user.org is not None:
|
||||
org_id = request.user.org.org_id
|
||||
groups = seaserv.get_org_groups(org_id, -1, -1)
|
||||
@@ -1627,6 +1632,9 @@ def pubuser(request):
|
||||
"""
|
||||
Show public users.
|
||||
"""
|
||||
if not request.user.permissions.can_view_org():
|
||||
raise Http404
|
||||
|
||||
# Make sure page request is an int. If not, deliver first page.
|
||||
try:
|
||||
current_page = int(request.GET.get('page', '1'))
|
||||
|
@@ -1658,7 +1658,7 @@ def repo_history_changes(request, repo_id):
|
||||
|
||||
return HttpResponse(json.dumps(changes), content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
@login_required_ajax
|
||||
def repo_create(request):
|
||||
'''
|
||||
Handle ajax post to create a library.
|
||||
@@ -1667,9 +1667,14 @@ def repo_create(request):
|
||||
if request.method != 'POST':
|
||||
return Http404
|
||||
|
||||
result = {}
|
||||
result = {}
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
if not request.user.permissions.can_add_repo():
|
||||
result['error'] = _(u"You do not have permission to create library")
|
||||
return HttpResponse(json.dumps(result), status=403,
|
||||
content_type=content_type)
|
||||
|
||||
form = RepoCreateForm(request.POST)
|
||||
if not form.is_valid():
|
||||
result['error'] = str(form.errors.values()[0])
|
||||
@@ -1734,7 +1739,7 @@ def repo_create(request):
|
||||
repo_name=repo_name)
|
||||
return HttpResponse(json.dumps(result), content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
@login_required_ajax
|
||||
def public_repo_create(request):
|
||||
'''
|
||||
Handle ajax post to create public repo.
|
||||
@@ -1743,9 +1748,14 @@ def public_repo_create(request):
|
||||
if request.method != 'POST':
|
||||
return Http404
|
||||
|
||||
result = {}
|
||||
result = {}
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
|
||||
if not request.user.permissions.can_add_repo():
|
||||
result['error'] = _(u"You do not have permission to create library")
|
||||
return HttpResponse(json.dumps(result), status=403,
|
||||
content_type=content_type)
|
||||
|
||||
form = SharedRepoCreateForm(request.POST)
|
||||
if not form.is_valid():
|
||||
result['error'] = str(form.errors.values()[0])
|
||||
|
@@ -23,6 +23,7 @@ from seahub.base.accounts import User
|
||||
from seahub.base.models import UserLastLogin
|
||||
from seahub.base.decorators import sys_staff_required
|
||||
from seahub.auth.decorators import login_required, login_required_ajax
|
||||
from seahub.constants import GUEST_USER, DEFAULT_USER
|
||||
from seahub.utils import IS_EMAIL_CONFIGURED, string2list, is_valid_username
|
||||
from seahub.views import get_system_default_repo_id
|
||||
from seahub.forms import SetUserQuotaForm, AddUserForm, BatchAddUserForm
|
||||
@@ -31,7 +32,8 @@ from seahub.share.models import FileShare
|
||||
|
||||
import seahub.settings as settings
|
||||
from seahub.settings import INIT_PASSWD, SITE_NAME, \
|
||||
SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER, SEND_EMAIL_ON_RESETTING_USER_PASSWD
|
||||
SEND_EMAIL_ON_ADDING_SYSTEM_MEMBER, SEND_EMAIL_ON_RESETTING_USER_PASSWD, \
|
||||
ENABLE_GUEST
|
||||
from seahub.utils import send_html_email, get_user_traffic_list, get_server_id
|
||||
from seahub.utils.sysinfo import get_platform_name
|
||||
|
||||
@@ -179,6 +181,11 @@ def sys_user_admin(request):
|
||||
user.self_usage = -1
|
||||
user.share_usage = -1
|
||||
user.quota = -1
|
||||
# check user's role
|
||||
if user.role == GUEST_USER:
|
||||
user.is_guest = True
|
||||
else:
|
||||
user.is_guest = False
|
||||
# populate user last login time
|
||||
user.last_login = None
|
||||
for last_login in last_logins:
|
||||
@@ -202,8 +209,10 @@ def sys_user_admin(request):
|
||||
'have_ldap': have_ldap,
|
||||
'platform': platform,
|
||||
'server_id': server_id[:8],
|
||||
},
|
||||
context_instance=RequestContext(request))
|
||||
'default_user': DEFAULT_USER,
|
||||
'guest_user': GUEST_USER,
|
||||
'enable_guest': ENABLE_GUEST,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
@@ -243,7 +252,6 @@ def sys_user_admin_ldap(request):
|
||||
if last_login.username == user.email:
|
||||
user.last_login = last_login.last_login
|
||||
|
||||
|
||||
return render_to_response(
|
||||
'sysadmin/sys_useradmin_ldap.html', {
|
||||
'users': users,
|
||||
@@ -284,6 +292,11 @@ def sys_user_admin_admins(request):
|
||||
user.self_usage = -1
|
||||
user.share_usage = -1
|
||||
user.quota = -1
|
||||
# check user's role
|
||||
if user.role == GUEST_USER:
|
||||
user.is_guest = True
|
||||
else:
|
||||
user.is_guest = False
|
||||
# populate user last login time
|
||||
user.last_login = None
|
||||
for last_login in last_logins:
|
||||
@@ -298,8 +311,9 @@ def sys_user_admin_admins(request):
|
||||
'not_admin_users': not_admin_users,
|
||||
'CALC_SHARE_USAGE': CALC_SHARE_USAGE,
|
||||
'have_ldap': have_ldap,
|
||||
},
|
||||
context_instance=RequestContext(request))
|
||||
'default_user': DEFAULT_USER,
|
||||
'guest_user': GUEST_USER,
|
||||
}, context_instance=RequestContext(request))
|
||||
|
||||
@login_required
|
||||
@sys_staff_required
|
||||
@@ -497,11 +511,16 @@ def user_toggle_status(request, user_id):
|
||||
|
||||
@login_required_ajax
|
||||
@sys_staff_required
|
||||
def user_toggle_role(request, user_id):
|
||||
def user_toggle_role(request, email):
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
|
||||
from seahub import constants
|
||||
DEFAULT_USER = getattr(constants, 'DEFAULT_USER', 'default')
|
||||
if not is_valid_username(email):
|
||||
return HttpResponse(json.dumps({'success': False}), status=400,
|
||||
content_type=content_type)
|
||||
|
||||
if not ENABLE_GUEST:
|
||||
return HttpResponse(json.dumps({'success': False}), status=403,
|
||||
content_type=content_type)
|
||||
|
||||
try:
|
||||
user_role = request.GET.get('r', DEFAULT_USER)
|
||||
@@ -509,7 +528,7 @@ def user_toggle_role(request, user_id):
|
||||
user_role = DEFAULT_USER
|
||||
|
||||
try:
|
||||
user = User.objects.get(id=int(user_id))
|
||||
user = User.objects.get(email)
|
||||
User.objects.update_role(user.email, user_role)
|
||||
|
||||
return HttpResponse(json.dumps({'success': True}),
|
||||
|
@@ -129,7 +129,10 @@ def personal_wiki_create(request):
|
||||
result = {'error': err_msg}
|
||||
return HttpResponse(json.dumps(result), status=status,
|
||||
content_type=content_type)
|
||||
|
||||
|
||||
if not request.user.permissons.can_add_repo():
|
||||
return json_error(_('You do not have permission to create wiki'), 403)
|
||||
|
||||
form = WikiCreateForm(request.POST)
|
||||
if not form.is_valid():
|
||||
return json_error(str(form.errors.values()[0]))
|
||||
|
Reference in New Issue
Block a user