1
0
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:
cuihaikuo
2018-01-06 15:28:11 +08:00
parent bb89603e5b
commit 533755377f
5 changed files with 63 additions and 29 deletions

View File

@@ -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;
}

View File

@@ -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)
{

View File

@@ -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

View File

@@ -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,

View File

@@ -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,