0

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

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

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

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

4

1 回答 1

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 来完成。将对您有所帮助。

我希望这有帮助。

于 2013-10-11T11:19:34.157 回答