0

I have a choice column, 'Status', in SharePoint 2013 form. User can make an update on the Status, Open/In Process/Closed. Is there any way only allow some user to update Status to 'Closed'? Thanks!

2 Answers 2

2

OOTB, SharePoint doesn't gives an option to do it. but using Javascript we can achieve it.

Considering that Users who can mark Status as "Closed", lets have them in a separate SharePoint group, then user who doesn't belong to that group will not have an option "Closed" in the SharePoint edit form. Use the below code in your Edit form,

<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.js"></script>
<script type="text/javascript">
var isCurrentUserMemberOfGroup = function (grpName) {
    var def = $.Deferred();
    var userInGroup;
    var currentContext = new SP.ClientContext.get_current();
    var currentWeb = currentContext.get_web();

    var currentUser = currentContext.get_web().get_currentUser();
    currentContext.load(currentUser);

    var allGroups = currentWeb.get_siteGroups();
    currentContext.load(allGroups);

    var group = allGroups.getByName(grpName);
    currentContext.load(group);

    var groupUsers = group.get_users();
    currentContext.load(groupUsers);

    currentContext.executeQueryAsync(
        function (sender, args) {
            var isMember = "false";
            var groupUserEnumerator = groupUsers.getEnumerator();
            while (groupUserEnumerator.moveNext()) {
                var groupUser = groupUserEnumerator.get_current();
                if (groupUser.get_id() == currentUser.get_id()) {
                    isMember = "true";
                    break;
                }
            }
            if (isMember === "true") {
                def.resolve(true);
            }
            else {
                def.resolve(false);
            }

        },
        function (sender, args) {

            def.fail(false);
        });
    return def.promise();
};
$(document).ready(function(){   
    ExecuteOrDelayUntilScriptLoaded(processForm, "sp.js");
    function processForm(){     
        var isMember = isCurrentUserMemberOfGroup("Your Group Name");
        isMember.done(function (result) {
            if (!result) {              

                var select = document.getElementById('Your Dropdown ID');
                for(i=select.length-1;i>=0;i--)  {
                   if (select.options[i].value !='Open' 
                       && select.options[i].value !='In Process') {
                        select.remove(i); //Delete option "Closed" for the users
                   }
                }               
            }
        });     
    }
});
</script>
1

SharePoint does not support column level permission settings. If a user has permission to edit the list item, then he can edit all columns. The only way to avoid update from certain users is to only grant them read permission.

More information:Understanding permission levels in SharePoint

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.