コード例 #1
0
ファイル: StartupTools.cs プロジェクト: devio-at/STW6
        /// <summary>
        /// Imports version 2.0 page discussion settings and properly propagates them to user groups and single pages, when needed, for the given wiki.
        /// </summary>
        /// <param name="wiki">The wiki.</param>
        /// <returns><c>true</c> if the operation succeeded, <c>false</c> otherwise.</returns>
        private static bool ImportPageDiscussionPermissions(string wiki)
        {
            // Notes
            // Who can read pages, can read discussions
            // Who can modify pages, can post messages and read discussions
            // Who can manage pages, can manage discussions and post messages

            // Possible values: page|normal|locked|public
            string value = Settings.GetDiscussionPermissions(wiki).ToLowerInvariant();

            UserGroup usersGroup     = Users.FindUserGroup(wiki, Settings.GetUsersGroup(wiki));
            UserGroup anonymousGroup = Users.FindUserGroup(wiki, Settings.GetAnonymousGroup(wiki));

            bool done = true;

            AuthWriter authWriter = new AuthWriter(Collectors.CollectorsBox.GetSettingsProvider(wiki));

            switch (value)
            {
            case "page":
                // Nothing to do
                break;

            case "normal":
                // Allow Users to post messages
                done &= authWriter.SetPermissionForNamespace(AuthStatus.Grant, null, Actions.ForNamespaces.PostDiscussion, usersGroup);
                break;

            case "locked":
                // Deny Users to post messages
                done &= authWriter.SetPermissionForNamespace(AuthStatus.Deny, null, Actions.ForNamespaces.PostDiscussion, usersGroup);
                break;

            case "public":
                // Allow Users and Anonymous Users to post messages
                done &= authWriter.SetPermissionForNamespace(AuthStatus.Grant, null, Actions.ForNamespaces.PostDiscussion, usersGroup);
                done &= authWriter.SetPermissionForNamespace(AuthStatus.Grant, null, Actions.ForNamespaces.PostDiscussion, anonymousGroup);
                break;
            }

            return(true);
        }