日历中 SPlistitem级别的用户(角色)权限控制
这个问题在这个帖子中问过,
http://topic.csdn.net/u/20100125/14/4ee1761b-15ff-47e9-a6c6-d1ffa7f636e4.html
不过现在用户提出如果不是自己创建的记录的用户不能看到“编辑项目”“删除项目”的按钮
现在有个想法,在ItemEventReceiver.cs (public override void ItemAdded(SPItemEventProperties properties))
能不能控制splistitem级别的用户权限,以便每一条记录都有自己的用户权限设置
如果思路对的话,语句应该怎么写
我在网上试图找了些代码
//if(properties.ListItem.HasUniqueRoleAssignments)
//{
properties.ListItem.BreakRoleInheritance(false);//这句要么不进来,要么就报错拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))//}
SPRoleDefinition role = web.RoleDefinitions["读取"];//这里英文的Read不行,应该有哪些权限?SPRoleAssignment roleAssignment;
roleAssignment = new SPRoleAssignment(user);
roleAssignment.RoleDefinitionBindings.Add(role);
properties.ListItem.RoleAssignments.Add(roleAssignment);//这里也会报错properties.ListItem.SystemUpdate();
[解决办法]
会也不告诉你 让你上一次不给我分儿 = =
[解决办法]
你可以用js把原来的按钮屏蔽掉,然后自己写一个有自己的权限判断的按钮
[解决办法]
加上 SPSecurity.RunWithElevatedPrivileges 并且重新 OpenWeb 注意下面修改的地方
base.ItemAdded(properties);
SPListItem item = properties.ListItem;
SPSecurity.RunWithElevatedPrivileges(delegate() {
using(SPSite site = new SPSite(item.ParentList.ParentWeb.Site.ID)) {
using(SPWeb web = site.OpenWeb(item.ParentList.ParentWeb.ID))
// using (SPWeb web = item.ParentList.ParentWeb)
{
web.Lists[item.ParentList.ID].BreakRoleInheritance(false);
//item.BreakRoleInheritance(false);
SPRoleAssignment oRoleAssignment = new SPRoleAssignment(properties.UserLoginName, "", properties.UserDisplayName, "");
SPRoleDefinitionCollection collRoleDefinitions = web.RoleDefinitions;
SPRoleDefinitionBindingCollection collRoleDefinitionBindings = oRoleAssignment.RoleDefinitionBindings;
SPRoleAssignmentCollection collRoleAssignments = item.RoleAssignments;
collRoleDefinitionBindings.Add(collRoleDefinitions[0]);
collRoleAssignments.Add(oRoleAssignment);
web.Lists[item.ParentList.ID];
// item.Update();
}
[解决办法]
我具体实施的是工作流,让新建的时候启动工作流,将你上面的代码执行,然后指定用户权限。
或者取出创建者的用户组,赋给这个用户组读取权限,很灵活 自己利用吧 呵呵
[解决办法]
添加这个Code再试下:
SPWeb.AllowUnsafeUpdate = true