mirror of
https://github.com/haiwen/seafile-server.git
synced 2025-09-17 07:40:25 +00:00
Fix that shared folder can't be set permission.
This commit is contained in:
@@ -2518,29 +2518,19 @@ seafile_update_share_subdir_perm_for_user (const char *repo_id,
|
||||
}
|
||||
|
||||
char *real_path;
|
||||
char *vrepo_id;
|
||||
int ret = 0;
|
||||
|
||||
real_path = format_dir_path (path);
|
||||
vrepo_id = seaf_repo_manager_get_virtual_repo_id (seaf->repo_mgr, repo_id,
|
||||
real_path, owner);
|
||||
if (!vrepo_id) {
|
||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL,
|
||||
"Failed to get shared sub repo");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = seaf_share_manager_set_permission (seaf->share_mgr, vrepo_id,
|
||||
owner, share_user,
|
||||
permission);
|
||||
ret = seaf_share_manager_set_subdir_perm_by_path (seaf->share_mgr,
|
||||
repo_id, owner, share_user,
|
||||
permission, real_path);
|
||||
|
||||
if (ret < 0) {
|
||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL,
|
||||
"Failed to update share subdir permission for user");
|
||||
}
|
||||
g_free (vrepo_id);
|
||||
|
||||
out:
|
||||
g_free (real_path);
|
||||
return ret;
|
||||
}
|
||||
@@ -2795,29 +2785,17 @@ seafile_update_share_subdir_perm_for_group (const char *repo_id,
|
||||
}
|
||||
|
||||
char *real_path;
|
||||
char *vrepo_id;
|
||||
int ret = 0;
|
||||
|
||||
real_path = format_dir_path (path);
|
||||
vrepo_id = seaf_repo_manager_get_virtual_repo_id (seaf->repo_mgr, repo_id,
|
||||
real_path, owner);
|
||||
if (!vrepo_id) {
|
||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL,
|
||||
"Failed to get shared sub repo");
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
ret = seaf_repo_manager_set_group_repo_perm (seaf->repo_mgr, vrepo_id,
|
||||
share_group, permission,
|
||||
error);
|
||||
ret = seaf_repo_manager_set_subdir_group_perm_by_path (seaf->repo_mgr,
|
||||
repo_id, owner, share_group,
|
||||
permission, real_path);
|
||||
if (ret < 0) {
|
||||
g_set_error (error, SEAFILE_DOMAIN, SEAF_ERR_GENERAL,
|
||||
"Failed to update share subdir permission for group");
|
||||
}
|
||||
g_free (vrepo_id);
|
||||
|
||||
out:
|
||||
g_free (real_path);
|
||||
return ret;
|
||||
}
|
||||
|
@@ -2932,6 +2932,24 @@ seaf_repo_manager_set_group_repo_perm (SeafRepoManager *mgr,
|
||||
"int", group_id);
|
||||
}
|
||||
|
||||
int
|
||||
seaf_repo_manager_set_subdir_group_perm_by_path (SeafRepoManager *mgr,
|
||||
const char *repo_id,
|
||||
const char *username,
|
||||
int group_id,
|
||||
const char *permission,
|
||||
const char *path)
|
||||
{
|
||||
return seaf_db_statement_query (mgr->seaf->db,
|
||||
"UPDATE RepoGroup SET permission=? WHERE repo_id IN "
|
||||
"(SELECT repo_id FROM VirtualRepo WHERE origin_repo=? AND path=?) "
|
||||
"AND group_id=? AND user_name=?",
|
||||
5, "string", permission,
|
||||
"string", repo_id,
|
||||
"string", path,
|
||||
"int", group_id,
|
||||
"string", username);
|
||||
}
|
||||
static gboolean
|
||||
get_group_repoids_cb (SeafDBRow *row, void *data)
|
||||
{
|
||||
|
@@ -841,4 +841,12 @@ seaf_get_group_repos_by_user (SeafRepoManager *mgr,
|
||||
const char *user,
|
||||
int org_id,
|
||||
GError **error);
|
||||
|
||||
int
|
||||
seaf_repo_manager_set_subdir_group_perm_by_path (SeafRepoManager *mgr,
|
||||
const char *repo_id,
|
||||
const char *username,
|
||||
int group_id,
|
||||
const char *permission,
|
||||
const char *path);
|
||||
#endif
|
||||
|
@@ -114,6 +114,31 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
seaf_share_manager_set_subdir_perm_by_path (SeafShareManager *mgr, const char *repo_id,
|
||||
const char *from_email, const char *to_email,
|
||||
const char *permission, const char *path)
|
||||
{
|
||||
char *sql;
|
||||
int ret;
|
||||
|
||||
char *from_email_l = g_ascii_strdown (from_email, -1);
|
||||
char *to_email_l = g_ascii_strdown (to_email, -1);
|
||||
sql = "UPDATE SharedRepo SET permission=? WHERE repo_id IN "
|
||||
"(SELECT repo_id FROM VirtualRepo WHERE origin_repo=? AND path=?) "
|
||||
"AND from_email=? AND to_email=?";
|
||||
|
||||
ret = seaf_db_statement_query (mgr->seaf->db, sql,
|
||||
5, "string", permission,
|
||||
"string", repo_id,
|
||||
"string", path,
|
||||
"string", from_email_l,
|
||||
"string", to_email_l);
|
||||
g_free (from_email_l);
|
||||
g_free (to_email_l);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
seaf_share_manager_set_permission (SeafShareManager *mgr, const char *repo_id,
|
||||
const char *from_email, const char *to_email,
|
||||
|
@@ -27,6 +27,11 @@ seaf_share_manager_add_share (SeafShareManager *mgr, const char *repo_id,
|
||||
const char *from_email, const char *to_email,
|
||||
const char *permission);
|
||||
|
||||
int
|
||||
seaf_share_manager_set_subdir_perm_by_path (SeafShareManager *mgr, const char *repo_id,
|
||||
const char *from_email, const char *to_email,
|
||||
const char *permission, const char *path);
|
||||
|
||||
int
|
||||
seaf_share_manager_set_permission (SeafShareManager *mgr, const char *repo_id,
|
||||
const char *from_email, const char *to_email,
|
||||
|
Reference in New Issue
Block a user