mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-26 15:26:19 +00:00
handle-role-is-manual-set (#7371)
This commit is contained in:
@@ -111,11 +111,11 @@ class UserManager(object):
|
|||||||
|
|
||||||
return self.get(email=virtual_id)
|
return self.get(email=virtual_id)
|
||||||
|
|
||||||
def update_role(self, email, role):
|
def update_role(self, email, role, is_manual_set=True):
|
||||||
"""
|
"""
|
||||||
If user has a role, update it; or create a role for user.
|
If user has a role, update it; or create a role for user.
|
||||||
"""
|
"""
|
||||||
ccnet_api.update_role_emailuser(email, role)
|
ccnet_api.update_role_emailuser(email, role, is_manual_set=is_manual_set)
|
||||||
return self.get(email=email)
|
return self.get(email=email)
|
||||||
|
|
||||||
def create_oauth_user(self, email=None, password=None, is_staff=False, is_active=False):
|
def create_oauth_user(self, email=None, password=None, is_staff=False, is_active=False):
|
||||||
|
@@ -28,6 +28,11 @@ class CcnetUsers(object):
|
|||||||
self.role = kwargs.get('role')
|
self.role = kwargs.get('role')
|
||||||
self.passwd = kwargs.get('passwd')
|
self.passwd = kwargs.get('passwd')
|
||||||
|
|
||||||
|
class CcnetUserRole(object):
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
self.role = kwargs.get('role')
|
||||||
|
self.is_manual_set = kwargs.get('is_manual_set')
|
||||||
|
|
||||||
class CcnetDB:
|
class CcnetDB:
|
||||||
|
|
||||||
@@ -211,3 +216,24 @@ class CcnetDB:
|
|||||||
cursor.execute(sql)
|
cursor.execute(sql)
|
||||||
user_count = cursor.fetchone()[0]
|
user_count = cursor.fetchone()[0]
|
||||||
return user_count
|
return user_count
|
||||||
|
|
||||||
|
def get_user_role_from_db(self, email):
|
||||||
|
|
||||||
|
sql = f"""
|
||||||
|
SELECT `role`, `is_manual_set` FROM `{self.db_name}`.`UserRole` WHERE email = '{email}';
|
||||||
|
"""
|
||||||
|
with connection.cursor() as cursor:
|
||||||
|
cursor.execute(sql)
|
||||||
|
row = cursor.fetchone()
|
||||||
|
if not row:
|
||||||
|
role = None
|
||||||
|
is_manual_set = False
|
||||||
|
else:
|
||||||
|
role = row[0]
|
||||||
|
is_manual_set = row[1]
|
||||||
|
|
||||||
|
params = {
|
||||||
|
'role': role,
|
||||||
|
'is_manual_set': is_manual_set
|
||||||
|
}
|
||||||
|
return CcnetUserRole(**params)
|
||||||
|
@@ -19,6 +19,7 @@ from seahub.base.accounts import User
|
|||||||
from seahub.profile.models import Profile
|
from seahub.profile.models import Profile
|
||||||
from seahub.utils.file_size import get_quota_from_string
|
from seahub.utils.file_size import get_quota_from_string
|
||||||
from seahub.role_permissions.utils import get_enabled_role_permissions_by_role
|
from seahub.role_permissions.utils import get_enabled_role_permissions_by_role
|
||||||
|
from seahub.utils.ccnet_db import CcnetDB
|
||||||
|
|
||||||
# Get an instance of a logger
|
# Get an instance of a logger
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@@ -106,14 +107,20 @@ class ShibbolethRemoteUserMiddleware(RemoteUserMiddleware):
|
|||||||
# call make profile.
|
# call make profile.
|
||||||
self.make_profile(user, shib_meta)
|
self.make_profile(user, shib_meta)
|
||||||
|
|
||||||
|
db_api = CcnetDB()
|
||||||
|
db_user_role = db_api.get_user_role_from_db(user.email)
|
||||||
|
if db_user_role.is_manual_set:
|
||||||
|
user_role = db_user_role.role
|
||||||
|
|
||||||
|
else:
|
||||||
if CUSTOM_SHIBBOLETH_GET_USER_ROLE:
|
if CUSTOM_SHIBBOLETH_GET_USER_ROLE:
|
||||||
user_role = custom_shibboleth_get_user_role(shib_meta)
|
user_role = custom_shibboleth_get_user_role(shib_meta)
|
||||||
if user_role:
|
if user_role:
|
||||||
ccnet_api.update_role_emailuser(user.email, user_role)
|
ccnet_api.update_role_emailuser(user.email, user_role, False)
|
||||||
else:
|
else:
|
||||||
user_role = self.update_user_role(user, shib_meta)
|
user_role = self.update_user_role(user, shib_meta, False)
|
||||||
else:
|
else:
|
||||||
user_role = self.update_user_role(user, shib_meta)
|
user_role = self.update_user_role(user, shib_meta, False)
|
||||||
|
|
||||||
if user_role:
|
if user_role:
|
||||||
self.update_user_quota(user, user_role)
|
self.update_user_quota(user, user_role)
|
||||||
@@ -208,7 +215,7 @@ class ShibbolethRemoteUserMiddleware(RemoteUserMiddleware):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def update_user_role(self, user, shib_meta):
|
def update_user_role(self, user, shib_meta, is_manual_set):
|
||||||
affiliation = shib_meta.get('affiliation', '')
|
affiliation = shib_meta.get('affiliation', '')
|
||||||
if not affiliation:
|
if not affiliation:
|
||||||
return
|
return
|
||||||
@@ -216,7 +223,7 @@ class ShibbolethRemoteUserMiddleware(RemoteUserMiddleware):
|
|||||||
for e in affiliation.split(';'):
|
for e in affiliation.split(';'):
|
||||||
role = self._get_role_by_affiliation(e)
|
role = self._get_role_by_affiliation(e)
|
||||||
if role:
|
if role:
|
||||||
User.objects.update_role(user.email, role)
|
User.objects.update_role(user.email, role, is_manual_set)
|
||||||
return role
|
return role
|
||||||
|
|
||||||
def update_user_quota(self, user, user_role):
|
def update_user_quota(self, user, user_role):
|
||||||
|
Reference in New Issue
Block a user