Разрешение / Запретить маску в SharePoint - PullRequest
4 голосов
/ 13 октября 2010

У меня есть вопрос относительно масок разрешений SharePoint. В SharePoint можно установить права предоставления / отклонения с помощью масок. Подробности приведены в следующей статье.

http://msdn.microsoft.com/en-us/library/dd304243(PROT.13).aspx

У меня вопрос, когда у нас есть маска разрешения или отказа.

Например, если вы отказываете в разрешении «ViewItem» с помощью центрального администратора, вы получите 4611686844973976575 в качестве маски запрета. Это разрешение маски вычисляется с помощью aping | до нескольких индивидуальных разрешений масок.

Итак, можно ли извлечь отдельные маски разрешений, которые используются для расчета маски разрешений, например 4611686844973976575?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 01 декабря 2010

Если вы выполняете логическую операцию И над значением, например 0x0000000000000001 для «ViewListItems», которое содержится в маске, то вы получите само значение (или 1).Если вы выполните логическое И для значения, не входящего в эту маску, например значение «UseClientIntegration» 0x0000001000000000, то вы получите ноль (0).Это то, что вы можете даже протестировать в научном режиме приложения калькулятора Windows - возможно, сначала преобразовав маску в шестнадцатеричный формат, например, взяв пример 4611686844973976575 из базового 10 в 400000C072040BFF в шестнадцатеричном (основание 16).

Чтобы извлечь все значения из маски, вы должны проверить начальное значение по всем возможным значениям.Если все известные значения разрешений задокументированы на этой странице, тогда ответ на ваш вопрос - да.Я не знаю, на каком языке вы можете этого достичь, но основная идея в C #:

bool CheckMask( long Mask, long TestPermission ) {
    return (Mask && TestPermission) > 0;
}

long mask = 4611686844973976575;

const long ViewListItems = 0x0000000000000001;
bool HasPermission_ViewListItems = CheckMask(mask, ViewListItems);
// HasPermission_ViewListItems is true

const long UseClientIntegration = 0x0000001000000000;
bool HasPermission_UseClientIntegration = CheckMask(mask, UseClientIntegration);
// HasPermission_UseClientIntegration is false
2 голосов
/ 02 февраля 2011

Я сделал этот образец javascript благодаря ответу @zanlok

Я использовал JQuery, SPServices js (http://spservices.codeplex.com/) и эту ссылку для кодов масок http://msdn.microsoft.com/en-us/library/dd304243%28PROT.13%29.aspx Надеюсь, это поможет вам, я сделалэто потому, что мне это тоже было нужно, однако это также может помочь другим.

Вам нужно заменить divid значением элемента управления, который вы хотите разместить в html, и LIST NAME HERE на имяlist.

Скрипт выплюнет всех, у кого есть доступ к списку, и скажет, могут ли они читать, добавлять, изменять и удалять объекты. Надеется, что это поможет вам.

$('#divid').html('Working...').SPServices({
    operation: "GetPermissionCollection",
    objectName: 'LIST NAME HERE',
    objectType: "List",
    completefunc: function (xData, Status) {
        var out = "<ul>";
        $(xData.responseXML).find("Permission").each(function () {
            if ($(this).attr("MemberIsUser") === "True") {
                out += "<li>User: " + $(this).attr("UserLogin") + "</li>";
            } else {
                out += "<li>Group: " + $(this).attr("GroupName") + "</li>";
            }
            var readmask = 0x0000000000000001;
            var addmask = 0x0000000000000002;
            var editmask = 0x0000000000000004;
            var deletemask = 0x0000000000000008;
            out += "<li>Mask: " + $(this).attr("Mask") + "</li>";
            var canread = readmask & $(this).attr("Mask").toString(16) > 0 ? "Yes" : "No";
            var canadd = addmask & $(this).attr("Mask").toString(16) > 0 ? "Yes" : "No";
            var canedit = editmask & $(this).attr("Mask").toString(16) > 0 ? "Yes" : "No";
            var candelete = deletemask & $(this).attr("Mask").toString(16) > 0 ? "Yes" : "No";
            out += "<li>Can Read: " + canread + "</li>";
            out += "<li>Can Add: " + canadd + "</li>";
            out += "<li>Can Edit: " + canedit + "</li>";
            out += "<li>Can Delete: " + candelete + "</li>";
        });
        out += "</ul>";
        $('divid').html(out);
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...