Как программно создать папку в DotNetNuke и назначить ей разрешение?

#c# #asp.net #vb.net #dotnetnuke

#c# #asp.net #vb.net #dotnetnuke

Вопрос:

Я создал папку в DotNetNuke программно в корневом каталоге портала. Я просто хочу назначить права доступа к ней только один раз, например, я хочу сделать ее доступной только для чтения аутентифицированным пользователям. Есть какие-нибудь советы о том, как это сделать с помощью C # или VB.NEt ?

Спасибо.

Ответ №1:

Это довольно сложный процесс:

 var folderController = new FolderController();
var folderId =
    folderController.AddFolder(
        new FolderInfo(
            portalId, 
            folderName, 
            (int)FolderController.StorageLocationTypes.InsecureFileSystem,
            isProtected: false, 
            isCached: false, 
            lastUpdated: Null.NullDate));
var folder = folderController.GetFolderInfo(portalId, folderId);
Directory.CreateDirectory(folder.PhysicalPath);

var permissionController = new PermissionController();
var writePermission = permissionController.GetPermissionByCodeAndKey("SYSTEM_FOLDER", "WRITE").Cast<PermissionInfo>().Single();
var registeredUserRole = new RoleController().GetRoleByName(folder.PortalID, "Registered Users");
folder.FolderPermissions.Add(new FolderPermissionInfo
    {
        FolderID = folder.FolderID,
        PermissionID = writePermission.PermissionID,
        RoleID = registeredUserRole.RoleID,
        UserID = Null.NullInteger,
        PermissionKey = writePermission.PermissionKey,
        AllowAccess = false
    });
  

Комментарии:

1. Это действительно немного запутанно, но ваш ответ облегчает понимание. Большое вам спасибо.

2. bdukes — есть ли способ установить для всех пользователей разрешения типа чтение файлов

3. @codemypantsoff Вы должны иметь возможность задать RoleID значение int.Parse(DotNetNuke.Common.Globals.glbRoleAllUsers, CultureInfo.InvariantCulture) , чтобы установить разрешение для всех пользователей. Ключом разрешения на чтение является "READ" .

Ответ №2:

Следующий код не добавил разрешения для меня в базу данных.

 folder.FolderPermissions.Add(new FolderPermissionInfo
{
    FolderID = folder.FolderID,
    PermissionID = writePermission.PermissionID,
    RoleID = registeredUserRole.RoleID,
    UserID = Null.NullInteger,
    PermissionKey = writePermission.PermissionKey,
    AllowAccess = false
});
  

Мне пришлось использовать:

  FolderManager.Instance.SetFolderPermission(folder, 6, registeredUserRole.RoleID);
  
  • папка = FolderInfo
  • 6 = Идентификатор разрешения, напишите в этом случае (это также добавит разрешения: просмотр / browse).
  • registeredUserRole.RoleId = роль, которой вы хотите предоставить права доступа к папке.