SP列表项 - 禁用除项目创建者之外的所有用户的“编辑”,但仍然可以为所有用户保留单个列

时间:2013-10-10 11:38:52

标签: sharepoint sharepoint-2010 sharepoint-designer sharepoint-workflow

是否可以在SP 2013中使用项级别权限来禁用其他用户修改不是由他们创建但仍允许他们修改该项目中的单个字段(列)的项目?

我希望每个人都能够在单击“编辑”项目按钮后输入该列中的信息,但如果该项目不是由他创建的话,则无法修改任何其他字段。

只有项目创建者才能修改所有字段。

如何实现这一点的任何想法都非常受欢迎:)

1 个答案:

答案 0 :(得分:0)

您可以使用客户端对象模型,如下所示:

$(document).ready(function () {
if(CheckCreatedBy() != GetCurrentUser())
{
      $("input[Title='EditableByAllUsers']").prop("disabled", true);
}

});  

function CheckCreatedBy()
{
var clientContext = new SP.ClientContext.get_current();
var siteColl = clientContext.get_site();
var oList = siteColl.get_rootWeb().get_lists().getByTitle('ChangeEditForm');  
var itemId = _spGetQueryParam('id') ;
var camlQuery = new SP.CamlQuery();
camlQuery.set_viewXml('<View><Query><Where><Eq><FieldRef Name=\'ID\'/>' + 
    '<Value Type=\'Number\'>'+ itemId +'</Value></Eq></Where></Query></View>');
 this.collListItem= oList.getItems(camlQuery);
 clientContext.load(collListItem);        
  clientContext.executeQueryAsync(Function.createDelegate(this,this.onCheckCreatedBySuccessMethod), Function.createDelegate(this, this.onCheckCreatedByFailureMethod));        
return this.value;
    }
function onCheckCreatedBySuccessMethod(sender, args)
{
var CreatedBy = '';

var listItemEnumerator = collListItem.getEnumerator();

while (listItemEnumerator.moveNext()) {
    var oListItem = listItemEnumerator.get_current();
    CreatedBy =  oListItem.get_item('Author').get_lookupValue(); 
      alert(CreatedBy); 
      return CreatedBy ;
}
}
function onCheckCreatedByFailureMethod(sender, args)
{
alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());  
}

function GetCurrentUser()
{
var ClientContext = new  SP.ClientContext.get_current();
this.CurrentWeb = ClientContext.get_web();
ClientContext.load(this.CurrentWeb.get_currentUser());
ClientContext.executeQueryAsync(Function.createDelegate(this, this.onSuccessMethod), Function.createDelegate(this, this.onFailureMethod));  
  return this.value;
  }  
   function onSuccessMethod(sender, args) 
{    
   var userObject =this.CurrentWeb.get_currentUser().get_title();       
    return userObject;
}  
function onFailureMethod(sender, args) {  
    alert('request failed ' + args.get_message() + '\n' + args.get_stackTrace());  
}  

也可以使用XSL完成。 This会为您提供帮助。

我希望这会有所帮助。