Saturday, March 12, 2016

JQuery to redirect Non Site Collection administrators to Access Denied Page

Hi,

We had certain security urls.

We want to redirect Non site collection administrators to Access Denied Page instead of accessing secured urls.

For this, we have written the jquery as below

// Start .......Admin Settings JS to....................


/************************* Hide ==============*/
$(document).ready(function () {
    console.log('load');
    //check the current user
    SP.SOD.executeFunc('sp.js''SP.ClientContext', IsCurrentUserWithContributePerms);

});

//Logic to Redirect non site collection admins to Access Denied Page
function IsCurrentUserWithContributePerms() {
    console.log('Hi');
    IsCurrentUserMemberOfGroup(function (isCurrentUserInGroup) {

    });
}

//End of edit form validation script

function IsCurrentUserMemberOfGroup(OnComplete) {
    var context = new SP.ClientContext.get_current();
    var currentWeb = context.get_web();
    var currentUser = context.get_web().get_currentUser();
    context.load(currentUser);
    console.log(currentUser);

    context.executeQueryAsync(
            function (sender, args) {
                var userInGroup = IsUserInGroup(currentUser);
                console.log('S');
                OnComplete(userInGroup);
            },
            function OnFailure(sender, args) {
                console.log('F');
                OnComplete(false);
            }
    );

    function IsUserInGroup(user) {

        var isSiteAdmin = user.get_isSiteAdmin();
        if (isSiteAdmin) {
            console.log('Admin');

            return isSiteAdmin;

        }

        else {
            console.log('URL');

            var url = (window.location.href).toString().toLowerCase();
            console.log(url);
            if (url.indexOf("/_layouts/15/people.aspx") != -1 || url.indexOf("/_layouts/15/viewlsts.aspx") != -1 || url.indexOf("/_layouts/15/recyclebin.aspx") != -1 || url.indexOf("/_catalogs/masterpage/forms/allitems.aspx") != -1 || url.indexOf("/_layouts/15/user.aspx") != -1 || url.indexOf("/_layouts/15/groups.aspx") != -1 || url.indexOf("/_layouts/15/managefeatures.aspx") != -1 || url.indexOf("/_layouts/15/changesitemasterpage.aspx") != -1 || url.indexOf("/_layouts/15/settings.aspx") != -1 || url.indexOf("/_layouts/15/sitemanager.aspx") != -1 || url.indexOf("/_layouts/15/savetmpl.aspx") != -1 || url.indexOf("/_layouts/15/mngsiteadmin.aspx") != -1 || url.indexOf("/_layouts/15/mngsubwebs.aspx") != -1 || url.indexOf("/_layouts/15/sitedirectorysettings.aspx") != -1 || url.indexOf("/_layouts/15/mngctype.aspx") != -1 || url.indexOf("/_layouts/15/adminrecyclebin.aspx") != -1 || url.indexOf("/_layouts/15/areanavigationsettings.aspx") != -1 || url.indexOf("/_layouts/15/user.aspx") != -1 || url.indexOf("/_layouts/spusageweb.aspx") != -1 || url.indexOf("/_layouts/15/subedit.aspx") != -1 || url.indexOf("/_layouts/15/subchoos.aspx") != -1 || url.indexOf("/_catalogs/wt/forms/common.aspx") != -1 || url.indexOf("/_catalogs/wt/forms/allitems.aspx") != -1 || url.indexOf("/_layouts/15/mngfield.aspx") != -1 || url.indexOf("/_catalogs/lt/forms/allitems.aspx") != -1 || url.indexOf("/_catalogs/theme/forms/allitems.aspx") != -1 || url.indexOf("/_catalogs/theme/forms/allitems.aspx") != -1 || url.indexOf("/_catalogs/wp/forms/allitems.aspx") != -1 || url.indexOf("/_catalogs/wp") != -1 || url.indexOf("/_catalogs/solutions/") != -1 || url.indexOf("/_layouts/15/sharepointdesignersettings.aspx") != -1 || url.indexOf("/_layouts/15/areawelcomepage.aspx") != -1 || url.indexOf("/_layouts/15/areatemplatesettings.aspx") != -1 || url.indexOf("?contents=1") != -1 || url.indexOf("?pageview=shared&toolpaneview=2") != -1 || url.indexOf("?toolpaneview=2") != -1 || url.indexOf("_catalogs/users/simple.aspx") != -1 || url.indexOf("/_layouts/15/newsbweb.aspx") != -1 || url.indexOf("/_layouts/15/create.aspx") != -1 || url.indexOf("/_layouts/15/spcf.aspx") != -1 || url.indexOf("/_layouts/15/appregnew.aspx") != -1 || url.indexOf("/_layouts/15/srchvis.aspx") != -1 || url.indexOf("/_layouts/15/spcontnt.aspx") != -1 || url.indexOf("/_layouts/15/role.aspx") != -1 || url.indexOf("/_layouts/15/createpage.aspx") != -1 || url.indexOf("/_layouts/15/sitesubs.aspx") != -1 || url.indexOf("/_layouts/15/prjsetng.aspx") != -1) {
                console.log('REdirectURL');
                window.location.replace(_spPageContextInfo.webAbsoluteUrl + "/_layouts/15/AccessDenied.aspx");
            }
            console.log('Exit');

            return isSiteAdmin;

        }

    }
}


//End

Provided the path in the master page that is being used.
Finally non site collection administrators were getting Access Denied Page as below

Saturday, March 5, 2016

Http Handler to redirect Security Urls for Non Site Collection Administrators

Hi,

There were certain security urls where only site collection administrator should view.

Non site collection administrator should get AccessDenied Page of the site collection.

To achieve this, we have written the below code in the class library as below

public class Redirect : IHttpModule
    {
        public void Init(HttpApplication context)
        {
            context.PreRequestHandlerExecute += new EventHandler(ProcessRequestHandler);
        }

        private static void OnPreSendRequestHeaders(object sender, EventArgs eventArgs)
        {

        }

        private void ProcessRequestHandler(object sender, EventArgs e)
        {
            try
            {
                //using (StreamWriter writer = new StreamWriter("C:\\log.txt", true))
                //{
                    //writer.WriteLine(System.DateTime.Now);
                    HttpApplication context = (HttpApplication)sender;
                    string requestUrl = Convert.ToString(context.Request.Url);
                    string User = context.User.Identity.Name;
                    string strAbsoluteUri = context.Request.Url.AbsoluteUri.ToLower();
                    // check if request is accessing aspx page
                    if (strAbsoluteUri.Contains("/_layouts/15/sitemanager.aspx") || strAbsoluteUri.Contains("/_layouts/15/savetmpl.aspx") || strAbsoluteUri.Contains("/_layouts/15/mngsiteadmin.aspx") || strAbsoluteUri.Contains("/_layouts/15/mngsubwebs.aspx") || strAbsoluteUri.Contains("/_layouts/15/sitedirectorysettings.aspx") || strAbsoluteUri.Contains("/_layouts/15/mngctype.aspx") || strAbsoluteUri.Contains("/_layouts/15/adminrecyclebin.aspx") || strAbsoluteUri.Contains("/_layouts/15/areanavigationsettings.aspx") || strAbsoluteUri.Contains("/_layouts/15/user.aspx") || strAbsoluteUri.Contains("/_layouts/15/spusageweb.aspx") || strAbsoluteUri.Contains("/_layouts/15/subedit.aspx") || strAbsoluteUri.Contains("/_layouts/15/subchoos.aspx") || strAbsoluteUri.Contains("/_catalogs/wt/forms/common.aspx") || strAbsoluteUri.Contains("/_catalogs/wt/forms/allitems.aspx") || strAbsoluteUri.Contains("/_layouts/15/mngfield.aspx") || strAbsoluteUri.Contains("/_catalogs/lt/forms/allitems.aspx") || strAbsoluteUri.Contains("/_catalogs/theme/forms/allitems.aspx") || strAbsoluteUri.Contains("/_catalogs/wp/forms/allitems.aspx") || strAbsoluteUri.Contains("/_catalogs/solutions/") || strAbsoluteUri.Contains("/_layouts/15/sharepointdesignersettings.aspx") || strAbsoluteUri.Contains("/_layouts/15/areawelcomepage.aspx") || strAbsoluteUri.Contains("/_layouts/15/areatemplatesettings.aspx") || strAbsoluteUri.Contains("?pageview=shared&toolpaneview=2") || strAbsoluteUri.Contains("/_catalogs/users/simple.aspx") || strAbsoluteUri.Contains("/_layouts/15/newsbweb.aspx") || strAbsoluteUri.Contains("/_layouts/15/create.aspx") || strAbsoluteUri.Contains("/_layouts/15/spcf.aspx") || strAbsoluteUri.Contains("/_layouts/15/appregnew.aspx") || strAbsoluteUri.Contains("/_layouts/15/srchvis.aspx") || strAbsoluteUri.Contains("/_layouts/15/spcontnt.aspx") || strAbsoluteUri.Contains("/_layouts/15/role.aspx") || strAbsoluteUri.Contains("/_layouts/15/createpage.aspx") || strAbsoluteUri.Contains("/_layouts/15/sitesubs.aspx") || strAbsoluteUri.Contains("/_layouts/15/prjsetng.aspx") || strAbsoluteUri.Contains("/_layouts/15/bpcf.aspx") || strAbsoluteUri.Contains("/_layouts/15/mcontent.aspx") || strAbsoluteUri.Contains("/_layouts/15/people.aspx") || strAbsoluteUri.Contains("/_layouts/15/viewlsts.aspx") || strAbsoluteUri.Contains("/_layouts/15/recyclebin.aspx") || strAbsoluteUri.Contains("/_catalogs/masterpage/forms/allitems.aspx") || strAbsoluteUri.Contains("/_layouts/15/user.aspx") || strAbsoluteUri.Contains("/_layouts/15/groups.aspx") || strAbsoluteUri.Contains("/_layouts/15/managefeatures.aspx") || strAbsoluteUri.Contains("/_layouts/15/changesitemasterpage.aspx") || strAbsoluteUri.Contains("/_layouts/15/settings.aspx"))                       
                    {

                        using (SPSite site = new SPSite(SPContext.Current.Site.Url.ToString()))
                        {
                            using (SPWeb web = site.OpenWeb())
                            {

                                if (!web.CurrentUser.IsSiteAdmin)
                                {
                                    redirectToRegistrationPage(context);
                                }
                            }
                        }

                    }
                    //writer.WriteLine(System.DateTime.Now);
                //}
            }
            catch (Exception ex)
            {
            }
        }



        private void redirectToRegistrationPage(HttpApplication context)
        {
            context.Response.Redirect(SPContext.Current.Web.Url.ToString() + "/_layouts/15/AccessDenied.aspx");
        }


        public void Dispose()
        {

        }
    }

Deployment

1)      Copied and Pasted the dll into the bin folder of the web application
2)      Update the below in the web app web config under modules section in the below format
<add name="solutionname" type=" solutionname.classname, solutionname " />

Now non site collection administrators get the current site collection Access Denied Page as below