понедельник, 27 ноября 2017 г.

Отображение Ribbon для конкретного пользователя

Рассмотрим задачу, когда нужно скрыть риббон и верхнюю панель.
это сделать не так сложно, нужно добавить всего пару строчек CSS
1
2
3
4
5
6
#suiteBarDelta{
  display: none;
}
#s4-ribbonrow{
     display: none;
}

Но возникает проблема, ведь часть кнопок скрыта и администрировать становится не возможным. Конечно можно открыть панель разработчика в браузере и отобразить требуемы контент, но при частой работе с риббоном это не удобно.


Решение
Пишем скрипт который получает id текущего пользователя и если пользователю разрешено, то отображается риббон.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'use strict';
// получение текущего пользователя
function getCurrentUser() {
    var dfd = jQuery.Deferred();
    var currentUser;
    if (SP.ClientContext != null) {
        SP.SOD.executeOrDelayUntilScriptLoaded(getUser, 'sp.js');
    }
    else {
        SP.SOD.executeFunc('sp.js', null, getUser);
    }
    function getUser() {
        var context = new SP.ClientContext.get_current();
        var web = context.get_web();
        currentUser = web.get_currentUser();
        context.load(currentUser);
        context.executeQueryAsync(onSuccessMethod, onRequestFail);
    }
    function onSuccessMethod(sender, args) {
        //currUser = currentUser;
        dfd.resolve(currentUser);
    }
    function onRequestFail(sender, args) {
        console.log('ошибка получения пользователя' + args.get_message() + '\n' + args.get_stackTrace());
        dfd.reject(args);
    }
 
    return dfd.promise();
};
 
var currUser = getCurrentUser();
currUser.done(function (res) {       
          console.log("Ид текущего пользователя - ", res.get_id() )
        if(res.get_id() == 9)  
        {
            setTimeout(function(){
                console.log("показываем")
                jQuery('#suiteBarDelta').show();
                jQuery('#s4-ribbonrow').show();
            },3000)
        }
});
В примере установлен setTimeout, его можно убрать.
Вот что у нас на выходе.




2 комментария:

  1. Отлично! как раз то что надо! Спасибо!

    ОтветитьУдалить
  2. Добрый день!
    Как я понял Вы скрывали две панели как я понял отобразилась suiteBarDelta, а как отобразить s4-ribbonrow?
    Спасибо!

    ОтветитьУдалить