SetPermission使用sensenet API - 版本6.3

时间:2018-02-13 10:28:21

标签: asp.net sensenet

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

按照我的考虑,当我创建一个文档时,我想将See,open,Save和RunApplication权限作为新创建文档的默认权限给用户(用户来自函数参数)。

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

   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)单个用户对单个文档的多个权限

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

谢谢!

1 个答案:

答案 0 :(得分:1)

C#api

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

// 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();
  

作为旁注:在大多数情况下,在分配权限时,更好地与群组合作。因此,建议为组授予权限,并将用户作为成员加入组,而不是直接为用户分配权限。

     

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

OData api

客户端可以通过REST api获得相同的api。请查看this article中的 SetPermissions 操作或sensenet JavaScript client library中的类似API。