我正在研究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)单个用户对单个文档的多个权限
任何人都可以帮助解决这个问题吗?
谢谢!
答案 0 :(得分:1)
在服务器上有一个用于管理权限的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();
作为旁注:在大多数情况下,在分配权限时,更好地与群组合作。因此,建议为组授予权限,并将用户作为成员加入组,而不是直接为用户分配权限。
此外:维护更简单的安全结构更容易,例如,如果您在父容器(例如文件夹)上分配权限而不是在单个文件上分配权限。当然,如果你必须为每个文件设置权限,那就没关系了。
客户端可以通过REST api获得相同的api。请查看this article中的 SetPermissions 操作或sensenet JavaScript client library中的类似API。