none
求助,事件处理程序中修改文件权限的问题 RRS feed

  • 问题

  • 我想要写一个事件处理程序,实现在用户上传文件后,自动将文件权限继承解除,然后重新设置为管理员完全控制,作者只读。写的代码如下,但是在运行中发现,捕获到异常错误提示访问被拒绝。我查看过myWeb.CurrentUser.LoginName,值为SharePoint//System。请问哪里出错了?

    namespace PermissionDemo
    {
        public class PermissionDemoHandlerTongue TiedPItemEventReceiver
        {
            //将添加后的文件权限修改为管理员完全控制,所有者只读,其他用户无权限
            public override void  ItemCheckedIn(SPItemEventProperties properties)
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using ( SPSite mySite = new SPSite(properties.SiteId))
                    {
                        using (SPWeb myWeb = mySite.OpenWeb(properties.OpenWeb().ID))
                        {
                            try
                            {
                                SPList myList = myWeb.Lists[properties.ListId];
                                SPListItem myItem = properties.ListItem;
                                myItem.BreakRoleInheritance(false);
                                SPUser cUser = myWeb.Users.GetByID(properties.CurrentUserId);
                                SPRoleAssignment ra = new SPRoleAssignment(myWeb.EnsureUser(cUser.LoginName));
                                ra.RoleDefinitionBindings.Add(myWeb.RoleDefinitions["读取"]);
                                myItem.RoleAssignments.Add(ra);
                            }
                            catch (Exception ee)
                            {
                            }
                        }
                    }
                }
                    );
            }
        }
    }

    2008年7月17日 6:54

答案

  • 已解决。看了kaneboy的博客中关于用户和用户组的讲解以后,发现,要使用SPWeb.Allusers才能找到没有明确在站点上被赋予权限的用户。

    2008年7月23日 5:13

全部回复

  • 你确信你权限提升成功了?

    2008年7月21日 15:47
    版主
  • 现在已经找到了问题。获取到的当前用户ID在Web里面没有。用户是通过组的身份获取到权限的。如果我在权限里面单独加上用户帐号,然后给他授予受限权限,就可以找到该用户,并进行后面的操作。现在我比较困惑的是,如果我不手动添加这个用户帐号,就无法进行后面的操作,但是如果我尝试自动添加当前用户,一旦引用properties.userLoginName,程序运行到这个语句就自动跳过,无法进行后面的操作。

    请问应如何处理?

    2008年7月22日 2:14
  • 嗯,没看懂。

    2008年7月22日 16:34
    版主
  • 已解决。看了kaneboy的博客中关于用户和用户组的讲解以后,发现,要使用SPWeb.Allusers才能找到没有明确在站点上被赋予权限的用户。

    2008年7月23日 5:13