0

我正在研究 sensenet API。我遇到了关于 sensenetAPI 安全性的 setPermission 问题。

根据关注,当我创建一个文档时,我想将“查看”、“打开”、“保存”和“运行应用程序”权限作为新创建文档的默认设置给用户(用户取自函数参数)。

为了实现这一点,我使用下面的代码

   public static void SetCollabUserSecurity(string myUserEmailId, Node myNodetToSetSecurity)
    {
        var domainName = "Builtin";
        var strUsername = GetNameFromEmail(myUserEmailId);
        User user;
        using (new SystemAccount())
        {
                user = User.Load(domainName, strUsername);
                if (user != null && user.Enabled)
                {
                    var myUser = user;
                    myNodetToSetSecurity.Security.SetPermission(myUser, true, PermissionType.See,
                        PermissionValue.Allow);
                    myNodetToSetSecurity.Security.SetPermission(myUser, true, PermissionType.Open,
                        PermissionValue.Allow);
                    myNodetToSetSecurity.Security.SetPermission(myUser, true, PermissionType.Save,
                        PermissionValue.Allow);
                    myNodetToSetSecurity.Security.SetPermission(myUser, true, PermissionType.RunApplication,
                       PermissionValue.Allow);
                }
        }
    }

当我使用这个功能时,我创建文档的过程变得很耗时。执行大约需要 40 秒时间。

因此,如果我想与多个用户共享同一个新创建的文档,假设有 3 个用户并且我想将上述权限授予所有用户,那么我的单个函数调用需要 120 秒(2 分钟)是时候简单地分配权限了。

是否有任何可用的 Odata REST API 调用或任何可用的 sensenet 库调用,我可以通过它们分配...

1) 单个文档的多个用户的多个权限或 2) 单个文档的单个用户的多个权限

任何人都可以帮助解决这个问题吗?

谢谢!

4

1 回答 1

1

C# 接口

服务器上有 ac# api 用于管理权限,请查看本文了解详细信息。您可以使用AclEditor类在一轮中设置多个权限。请注意,您必须在最后调用Apply方法才能实际执行操作。

// set permissions on folder1, folder2 and file1 for two users and a group
SecurityHandler.CreateAclEditor()
   .Allow(folder1.Id, user1.Id, false, PermissionType.Open, PermissionType.Custom01)
   .Allow(folder2.Id, user2.Id, false, PermissionType.Open)
   .Allow(file1.Id, editorsGroup.Id, false, PermissionType.Save)
   .Apply();

附带说明:在大多数情况下,在分配权限时,使用组比使用用户更好。因此,建议将权限授予组并将用户作为成员放入组中,而不是直接将权限分配给用户。

另外:维护更简单的安全结构更容易,例如,如果您在父容器(例如文件夹)而不是单个文件上分配权限。当然,如果您必须为每个文件设置权限,那就没问题了。

数据接口

相同的 api 可通过 REST api 从客户端获得。请查看本文中的SetPermissions操作或 sensenet 的JavaScript 客户端库中的类似 api 。

于 2018-02-13T19:23:36.227 回答