我有一个关于SharePoint权限掩码的问题。在SharePoint中,可以使用掩码设置授予/拒绝权限。详细信息如下。
http://msdn.microsoft.com/en-us/library/dd304243(PROT.13).aspx
我的问题是我们有一个允许/拒绝面具。
例如,如果您使用central-admin拒绝“ViewItem”权限,您将获得4611686844973976575作为拒绝掩码。此权限掩码通过aping |来计算几个个人许可面具。
那么可以提取用于计算权限掩码的个别权限掩码,例如4611686844973976575吗?
感谢。
答案 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);
}
});