您的位置:首页 > 其它

sharepoint视图权限控制器二次开发

2016-02-06 12:44 375 查看
<pre name="code" class="html">

将近年关,不高兴做事情,所以研究了一会SharePoint的视图权限控制,之前网上下了一个MOSS2007的视图权限wsp包,因为自己使用的环境主要是sharepoint 2013,所以界面上很不友好,决定自己写一个视图权限的东西。在这里顺手记录下了开发过程中的一些心得和体会,如有不对的地方,还请各位大神多多提点。我这个想法主要基于SharePoint下Web Part的开发。在每个视图页面添加一个权限过滤webpart,然后根据本站点的list来判断权限是否正确。

先通过VS新建了一个sharepoint visual webpart 2013,然后在usercontroller代码中贴入

public VisualWebPart1 WebPart { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (CanSeeView(WebPart.listname, WebPart.viewname, SPContext.Current.Site.OpenWeb().CurrentUser) == false)
{
SPUtility.TransferToErrorPage("您没有权限访问此视图.");
}
}

//// <summary>
/// 用户是否可以查看此时图
/// </summary>
/// <param name="viewID"></param>
/// <param name="userOrGroup"></param>
/// <returns></returns>
private bool CanSeeView(string list, string view, SPUser currentUser)
{
try
{
if (view == "test")
{
return true;
}
SPWeb web = SPContext.Current.Web;
SPList listViewConfig = web.Lists["ListViewPermissionConfig"];
string strQuery = string.Format("<Where><And><Eq><FieldRef Name='ListName' /><Value Type='Text'>{0}</Value></Eq><Eq><FieldRef Name='ViewName' /><Value Type='Text'>{1}</Value></Eq></And></Where>", list.ToString(),view.ToString());
SPQuery query = new SPQuery();
query.Query = strQuery;
SPListItemCollection items = listViewConfig.GetItems(query);
if (items.Count > 0)
{
foreach (SPListItem item in items)
{
//SPFieldUserValue[] userValues = item["Permission"] as SPFieldUserValue[];
object obj = item["Permission"];
SPFieldUserValueCollection userValues = (SPFieldUserValueCollection)obj;
foreach (SPFieldUserValue value in userValues)
{
//如果value.User非空,则代表当前值是用户,相反则是用组。
if (value.User != null)
{
if (currentUser.LoginName.Equals(value.User.LoginName))
return true;
}
else
{
//判断当前用户是否在用户组中
SPGroup group = web.Groups.GetByID(value.LookupId);
foreach (SPUser user in group.Users)
{
if (currentUser.LoginName.Equals(user.LoginName))
return true;
}
}
}
}
}
return false;
}
catch (Exception e){
return false;
}

记得要引用

using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.SharePoint.Utilities;然后在Webpart 代码中贴入
protected override void CreateChildControls()
{
VisualWebPart1UserControl control = Page.LoadControl(_ascxPath) as VisualWebPart1UserControl;
//添加自定义属性
if (control != null)
{
control.WebPart = this;
}
Controls.Add(control);
}

private string listN = "test";
private string viewN = "test";
[Personalizable(), WebBrowsable]
public string listname
{
get
{
return listN;
}
set
{
listN = value;
}
}
[Personalizable(), WebBrowsable]
public string viewname
{
get
{
return viewN;
}
set
{
viewN = value;
}
}


其实并不困难。期间需要注意的应该是权限表的Permission字段应该允许多选。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息