HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/RMourik/bassol.nl/CMS/CMSModules/Membership/Pages/Users/User_ManageRoles.aspx.cs
using System;
using System.Data;
using System.Collections;
using System.Web.UI.WebControls;

using CMS.DataEngine;
using CMS.Helpers;
using CMS.SiteProvider;
using CMS.Membership;
using CMS.UIControls;

public partial class CMSModules_Membership_Pages_Users_User_ManageRoles : CMSModalPage
{
    #region "Variables"

    private int userId;
    private int siteId;

    #endregion


    protected void Page_Load(object sender, EventArgs e)
    {
        // Check permissions
        var user = MembershipContext.AuthenticatedUser;
        if (user != null)
        {
            // Check UI elements
            if (!user.IsAuthorizedPerUIElement("CMS.Users", "Users"))
            {
                RedirectToUIElementAccessDenied("CMS.Users", "Users");
            }

            if (!user.IsAuthorizedPerUIElement("CMS.Roles", "Roles"))
            {
                RedirectToUIElementAccessDenied("CMS.Roles", "Roles");
            }

            // Check "read" permissions
            if (!user.IsAuthorizedPerResource("CMS.Users", "Read"))
            {
                RedirectToAccessDenied("CMS.Users", "Read");
            }

            if (!user.IsAuthorizedPerResource("CMS.Roles", "Read"))
            {
                RedirectToAccessDenied("CMS.Roles", "Read");
            }
        }

        userId = QueryHelper.GetInteger("userId", 0);

        // Check that only global administrator can edit global administrator's accounts
        UserInfo ui = UserInfoProvider.GetUserInfo(userId);
        var currentUser = MembershipContext.AuthenticatedUser;
        CheckUserAvaibleOnSite(ui);
        if ((ui != null) && !currentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin) && ui.UserIsGlobalAdministrator && (ui.UserID != currentUser.UserID))
        {
            plcTable.Visible = false;
            ShowError(GetString("Administration-User_List.ErrorGlobalAdmin"));
            return;
        }

        // Only global admin can choose the site
        if (currentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.Admin))
        {
            // Show site selector
            CurrentMaster.DisplaySiteSelectorPanel = true;

            // Set site selector
            siteSelector.DropDownSingleSelect.AutoPostBack = true;
            siteSelector.AllowAll = false;

            if (currentUser.CheckPrivilegeLevel(UserPrivilegeLevelEnum.GlobalAdmin))
            {
                siteSelector.AllowGlobal = true;
            }

            siteSelector.UserId = userId;
            siteSelector.OnlyRunningSites = false;
            siteSelector.UniSelector.OnSelectionChanged += UniSelector_OnSelectionChanged;

            if (!RequestHelper.IsPostBack())
            {
                if ((ui != null) && ui.IsInSite(SiteContext.CurrentSiteName))
                {
                    siteSelector.Value = SiteContext.CurrentSiteID;
                }
                else
                {
                    siteSelector.Value = siteSelector.GlobalRecordValue;
                }
            }

            siteId = siteSelector.SiteID;
        }
        else
        {
            siteSelector.StopProcessing = true;
            siteId = SiteContext.CurrentSiteID;
        }

        // Init UI
        itemSelectionElem.LeftColumnLabel.Text = GetString("user.manageroles.availableroles");
        itemSelectionElem.RightColumnLabel.Text = GetString("user.manageroles.userinroles");
        PageTitle.TitleText = GetString("user.manageroles.header");
        // Register the events
        itemSelectionElem.OnMoveLeft += itemSelectionElem_OnMoveLeft;
        itemSelectionElem.OnMoveRight += itemSelectionElem_OnMoveRight;
    }


    protected override void OnPreRender(EventArgs e)
    {
        // Load the roles into ItemSelection Control
        if (!RequestHelper.IsPostBack())
        {
            LoadRoles();
            itemSelectionElem.fill();
        }

        base.OnPreRender(e);
    }


    /// <summary>
    /// Test if edited user belongs to current site
    /// </summary>
    /// <param name="ui">User info object</param>
    public void CheckUserAvaibleOnSite(UserInfo ui)
    {
        if (ui != null)
        {
            if (!MembershipContext.AuthenticatedUser.IsGlobalAdministrator && !ui.IsInSite(SiteContext.CurrentSiteName))
            {
                RedirectToInformation(GetString("user.notinsite"));
            }
        }
    }


    /// <summary>
    /// Handles site selection change event.
    /// </summary>
    protected void UniSelector_OnSelectionChanged(object sender, EventArgs e)
    {
        LoadRoles();
        itemSelectionElem.fill();
        pnlUpdate.Update();
    }


    #region "ItemSelection events"

    protected void itemSelectionElem_OnMoveRight(object sender, CommandEventArgs e)
    {
        // Permissions check
        if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.Users", "ManageUserRoles"))
        {
            RedirectToAccessDenied("CMS.Users", "Manage user roles");
        }

        string argument = ValidationHelper.GetString(e.CommandArgument, "");
        if (!string.IsNullOrEmpty(argument))
        {
            string[] ids = argument.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string id in ids)
            {
                UserInfoProvider.AddUserToRole(userId, ValidationHelper.GetInteger(id, 0));
            }
        }
    }


    protected void itemSelectionElem_OnMoveLeft(object sender, CommandEventArgs e)
    {
        // Permissions check
        if (!MembershipContext.AuthenticatedUser.IsAuthorizedPerResource("CMS.Users", "ManageUserRoles"))
        {
            RedirectToAccessDenied("CMS.Users", "Manage user roles");
        }

        string argument = ValidationHelper.GetString(e.CommandArgument, "");
        if (!string.IsNullOrEmpty(argument))
        {
            string[] ids = argument.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string id in ids)
            {
                UserInfoProvider.RemoveUserFromRole(userId, ValidationHelper.GetInteger(id, 0));
            }
        }
    }

    #endregion


    #region "Private helper functions"

    private void LoadRoles()
    {
        itemSelectionElem.LeftItems = GetSelectionControlItems(GetRoleDataset(false));
        itemSelectionElem.RightItems = GetSelectionControlItems(GetRoleDataset(true));
    }


    /// <summary>
    /// Returns the dataset with roles for specified site.
    /// </summary>
    /// <param name="users">Determines whether to return only roles to which the user is assigned</param>
    private ObjectQuery<RoleInfo> GetRoleDataset(bool users)
    {
        string siteWhere = (siteId.ToString() == siteSelector.GlobalRecordValue) ? "SiteID IS NULL" : "SiteID = " + siteId;
        string where = "(RoleID " + (users ? "" : "NOT ") + "IN (SELECT RoleID FROM CMS_UserRole WHERE UserID = " + userId + ")) AND " + siteWhere + " AND RoleGroupID IS NULL";

        // Exclude generic roles
        string genericWhere = null;
        ArrayList genericRoles = RoleInfoProvider.GetGenericRoles();
        if (genericRoles.Count != 0)
        {
            foreach (string role in genericRoles)
            {
                genericWhere += "'" + SqlHelper.GetSafeQueryString(role, false) + "',";
            }

            if (genericWhere != null)
            {
                genericWhere = genericWhere.TrimEnd(',');
            }
            where += " AND ( RoleName NOT IN (" + genericWhere + ") )";
        }

        return RoleInfoProvider.GetRoles().Where(where).OrderBy("RoleDisplayName").Columns("RoleDisplayName, RoleID");
    }


    /// <summary>
    /// Returns the 2 dimensional array which can be used in ItemSelection control.
    /// </summary>
    private static string[,] GetSelectionControlItems(DataSet ds)
    {
        string[,] retval = null;
        if (!DataHelper.DataSourceIsEmpty(ds))
        {
            retval = new string[ds.Tables[0].Rows.Count, 2];
            for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                DataRow dr = ds.Tables[0].Rows[i];
                retval[i, 1] = Convert.ToString(dr["RoleDisplayName"]);
                retval[i, 0] = Convert.ToString(dr["RoleID"]);
            }
        }
        return retval;
    }

    #endregion
}