SetPermission With sensenet API - 版本 6.3
SetPermission With sensenet API - version 6.3
我正在研究 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) 单个用户对单个文档的多重权限
任何人都可以帮助解决这个问题吗?
谢谢!
C#api
在服务器上有一个c# api 用于管理权限,请查看this article 了解详情。您可以使用 AclEditor class 在一轮中设置多个权限。请注意,您必须在最后调用 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();
As a side note: in most cases it is better to work with groups than users when assigning permissions. So it is advisable to give permissions to a group and put users into the group as members instead of assigning permissions to users directly.
Also: it is easier to maintain a simpler security structure, for example if you assign a permission on the parent container (e.g. a folder) instead of on individual files. Of course if you have to set permission per file, then it is fine.
OData api
相同的 api 可通过 REST api 从客户端获得。请查看 sensenet this article or the similar api in the JavaScript client library 中的 SetPermissions 操作。
我正在研究 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) 单个用户对单个文档的多重权限
任何人都可以帮助解决这个问题吗?
谢谢!
C#api
在服务器上有一个c# api 用于管理权限,请查看this article 了解详情。您可以使用 AclEditor class 在一轮中设置多个权限。请注意,您必须在最后调用 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();
As a side note: in most cases it is better to work with groups than users when assigning permissions. So it is advisable to give permissions to a group and put users into the group as members instead of assigning permissions to users directly.
Also: it is easier to maintain a simpler security structure, for example if you assign a permission on the parent container (e.g. a folder) instead of on individual files. Of course if you have to set permission per file, then it is fine.
OData api
相同的 api 可通过 REST api 从客户端获得。请查看 sensenet this article or the similar api in the JavaScript client library 中的 SetPermissions 操作。