SharePoint中的权限/拒绝掩码

时间:2010-10-13 03:21:15

标签: sharepoint

我有一个关于SharePoint权限掩码的问题。在SharePoint中,可以使用掩码设置授予/拒绝权限。详细信息如下。

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

我的问题是我们有一个允许/拒绝面具。

例如,如果您使用central-admin拒绝“ViewItem”权限,您将获得4611686844973976575作为拒绝掩码。此权限掩码通过aping |来计算几个个人许可面具。

那么可以提取用于计算权限掩码的个别权限掩码,例如4611686844973976575吗?

感谢。

2 个答案:

答案 0 :(得分:4)

如果对掩码中包含的“ViewListItems”的值(例如0x0000000000000001)执行逻辑AND操作,则您将获得值本身(或1)。如果对不在该掩码中的值执行逻辑AND,如“UseClientIntegration”值0x0000001000000000,则将得到零(0)。这甚至可以通过Windows计算器应用程序的科学模式进行测试 - 也许首先将掩码转换为十六进制,例如将基础10中的4611686844973976575示例转换为十六进制(基数16)中的400000C072040BFF。

要从掩码中提取所有值,您必须针对所有可能的值测试初始值。如果该页面上记录了所有已知的权限值,那么您的问题的答案是肯定的。我不知道你想用哪种语言来实现这个目标,但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

答案 1 :(得分:2)

由于@zanlok回答

,我制作了这个javascript示例

我使用了JQuery,SPServices js(http://spservices.codeplex.com/) 这个掩码代码的链接 http://msdn.microsoft.com/en-us/library/dd304243%28PROT.13%29.aspx 我希望这可以帮到你,我这样做是因为我也需要它,但它也可以帮助别人。

您需要将divid替换为要放置html的控件的值,并将LIST NAME替换为列表名称。

该脚本将吐出有权访问列表的所有人,并说明他们是否可以阅读,添加,更改和删除内容。希望这会对你有所帮助。

$('#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);
    }
});