This commit is contained in:
owenchen committed 2026-10-21 15:05:55 +08:00
1 parent fd67fa8f63
commit 211d2cd253
31 files changed
+1830 -454

No files matched your search

@@ -275,6 +275,24 @@ namespace CloudBuilder.Master.Service
FamilyGroupPermissionEntity[] permissionEntities = repositoryFamilyGroupPermission.DetachedEntities.Where(x => x.UserName == service.UserId).ToArray();
FamilyFolderFavoriteEntity[] favorites = repositoryFamilyFolderFavorite.DetachedEntities.Where(x => x.UserName == service.UserId).ToArray();
// 管理员权限的唯一出口:本人任管理员的群,所有目录一律有权限(与 FamilyGroupService.FindByKey 管理员视角 IsSharePermission 全 Y 同口径)。
// 权限表只记普通成员的授权记录,管理员不逐目录补录——否则别的管理员建的新目录会漏锁(本接口是共享大厅/文件页/共享目标选择器共用的PermissionIndc判定点)
IRepository<FamilyGroupManagerEntity> repositoryFamilyGroupManager = repository.GetRepository<IRepository<FamilyGroupManagerEntity>>();
string[] managerFamilyNames = repositoryFamilyGroupManager.DetachedEntities
.Where(x => x.UserName == service.UserId && x.ManagerIndc == YesNoPolicy.YES && x.ValidIndc == YesNoPolicy.YES)
.Select(x => x.FamilyName).Distinct().ToArray();
// 群组开启「公开成员目录权限」(open_dir_indc=Y):群内所有目录对所有成员开放,与管理员放行同一出口
string[] memberFamilyNames = repositoryFamilyGroupManager.DetachedEntities
.Where(x => x.UserName == service.UserId && x.ValidIndc == YesNoPolicy.YES)
.Select(x => x.FamilyName).Distinct().ToArray();
IRepository<FamilyGroupEntity> repositoryFamilyGroup = repository.GetRepository<IRepository<FamilyGroupEntity>>();
string[] openDirFamilyNames = memberFamilyNames.Length > 0
? repositoryFamilyGroup.DetachedEntities
.Where(x => x.OpenDirIndc == YesNoPolicy.YES && memberFamilyNames.AsQueryable().Contains(x.FamilyName))
.Select(x => x.FamilyName).ToArray()
: new string[0];
string err = null;
try
{
@@ -293,7 +311,12 @@ namespace CloudBuilder.Master.Service
foreach (var item in list)
{
if (permissionEntities != null && permissionEntities.Length > 0)
if (managerFamilyNames.Contains(item.FamilyName) || openDirFamilyNames.Contains(item.FamilyName))
{
// 管理员 / 群开放全部目录:全目录放行
item.PermissionIndc = YesNoPolicy.YES;
}
else if (permissionEntities != null && permissionEntities.Length > 0)
{
foreach (var p in permissionEntities)
{