Here’s a little hack that you can do, in order to create permissions on views of any list or library. I’m not going to say this is the most pretty or perfect solution, but it’s at least a way to accomplish this. It gets asked all the time. “How can I set permissions so that only certain people can see certain views of my list?”
So the next option is a non-supported approach, but my favorite: use HTTP modules!
Http modules intercept page requests and allow custom code to run before the page actually renders. Thus, we can intercept the request and check if it is an application page. Then we can change the master page reference dynamically as the page renders.
To achieve this, follow these steps:
1. Create a new VS project (Class Library project) and call it HttpModule
2. Rename Class1 to MyHttpModule and add the following code to it:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.IO;
using Microsoft.SharePoint;
namespace HttpModule
{
public class MyHttpModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(validation_PreRequestHandlerExecute);
}
void validation_PreRequestHandlerExecute(object sender, EventArgs e)
{
Page page = HttpContext.Current.CurrentHandler as Page;
if (page != null)
{
page.PreInit += new EventHandler(validation_PreInit);
}
}
void validation_PreInit(object sender, EventArgs e) {
Page page = sender as Page;
if (page != null) {
string url = page.Request.Url.ToString ();
if (url.Contains("/Lists/wjc/summary.aspx"))// Lists/wjc/summary.aspx is the relative url of list view.
{
if (HttpContext.Current.User.Identity.Name != "MICRO\\porter")//MICRO\\porter is login name.
{
page.Response.Redirect("/_layouts/accessdenied.aspx");
}
}
if (url.Contains("/_layouts/accessdenied.aspx")&&page.Request .UrlReferrer .ToString ().Contains ("/Lists/wjc/summary.aspx")) {
if (HttpContext.Current.User.Identity.Name == "MICRO\\porter")
{
page.Response.Redirect("/Lists/wjc/summary.aspx");
}
}
}
}
public void Dispose()
{
}
}
}
1. Sign and build the project, then place the dll in the GAC
2. Go to your site’s virtual directory location (usually at c:\Inetpub\wwroot\wss\VirtualDirectories\SITENAME)
3. Add the next line to your web.config within the “httpModules” section:
<add name=”HttpModule” type=”HttpModule.MyHttpModule, HttpModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ca0f662d5d7f9d5d″ />
Hope this helps!
No comments:
Post a Comment