Tôi đang tạo cổng theo dõi vấn đề dựa trên Sharepoint. Người dùng có thể thêm các mục nhập, nhưng trong mục nhập, tôi muốn một cột chỉ hiển thị cho một nhóm người dùng cụ thể (Quản trị viên). Có cách nào để đặt kiểm soát truy cập dựa trên cột không?Làm cách nào để quản lý kiểm soát truy cập dựa trên cột trong danh sách Sharepoint?
5
A
Trả lời
7
Theo như tôi biết rằng không có sẵn trong nền tảng chuẩn. Những gì bạn có thể làm mặt khác là để thủ công fieldcontrol của riêng bạn
Vì vậy, trong fieldtypes.xml tùy chỉnh
<FieldTypes>
<FieldType>
<Field Name="TypeName">MyInteger</Field>
<Field Name="ParentType">Integer</Field>
...
<Field Name="FieldTypeClass">xxx</Field>
</FieldType>
và trong sitecolumns.xml
<Field ID="xxx"
Name="xxx"
DisplayName="xxx
Description="xxx"
Group="xxx
Type="MyInteger"
DisplaceOnUpgrade="TRUE"
/>
và trong fieldcontrol bạn
public class MyInteger: SPFieldNumber
{
public MyInteger(SPFieldCollection fields, string fieldName)
: base(fields, fieldName)
{
}
public MyInteger(SPFieldCollection fields, string typeName, string displayName)
: base(fields, typeName, displayName)
{
}
public override BaseFieldControl FieldRenderingControl
{
[SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)]
get
{
Microsoft.SharePoint.WebControls.BaseFieldControl ctl =
new MyIntegerControl();
ctl.FieldName = InternalName;
return ctl;
}
}
}
và trong MyIntegerControl bạn có thể làm bất cứ điều gì bạn muốn (nhiều ghi đè), nhưng là một examp le là:
protected override void CreateChildControls()
{
base.CreateChildControls();
if (this.ControlMode == SPControlMode.New ||
this.ControlMode == SPControlMode.Display)
{
// check that use is admin and display value
}
}
0
Bạn cũng có thể làm điều này bằng đăng ký một CustomAction, và thay đổi schema xem danh sách động
<CustomAction Id="CustomAction"
GroupId="SiteActions"
Location="Microsoft.SharePoint.StandardMenu"
Sequence="1003"
ControlAssembly="$SharePoint.Project.AssemblyFullName$"
ControlClass="CustomAction.ColumnPermissionAction"/>
và trong lớp học kiểm soát của bạn:
class ColumnPermissionAction : Control
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
HideColumn();
}
private HideColumn(){
WebPart part=//find your web part
string colName="SecretColumn";
if(part is ListViewWebPart){
(part as ListViewWebPart).ListViewXml = (part as ListViewWebPart).ListViewXml.Replace(string.Format("<FieldRef Name=\"{0}\"/>", colName), string.Empty);
}else if(part is XsltListViewWebPart){
PropertyInfo property = typeof(DataFormWebPart).GetProperty("ListViewXmlDom", BindingFlags.NonPublic | BindingFlags.Instance);
if (property != null)
{
XmlNode xmlView = property.GetValue(part as XsltListViewWebPart, null) as XmlNode;
if (xmlView != null)
{
XmlNode node = xmlView.SelectSingleNode("//ViewFields");
if (node != null)
{
var field = node.SelectSingleNode(string.Format("FieldRef[@Name='{0}']", colName));
if (field != null)
{
node.RemoveChild(field);
}
}
}
}
}
}
}
Tôi đồng ý rằng một tùy chỉnh lĩnh vực là con đường để đi. Ví dụ tuyệt vời! –
Tôi cũng vậy, và được trình bày rất rõ ràng! – Colin