SharePoint2013代码操作权限组的几个Demo

1,清明节闲来无聊,敲代码吧,不知道敲什么,不敲吧,又好像比较颓废,不思进取。遂把以前项目中别的同事负责的权限模块的代码看一看,做俩个Demo。

(1)代码创建组

protected void CreateGroup_Click(object sender, EventArgs e)
        {
            string groupName = this.groupTitle.Text;
            string groupDescription = "I'm WanRen,I'm creating group";
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        web.AllowUnsafeUpdates = true;
                        //组名,拥有者(我理解为创建者,谁创的就是谁的罢),组里的默认用户,组描述
                        web.SiteGroups.Add(groupName, web.CurrentUser, null, groupDescription);
                        //获取到刚刚创建的这个组
                        SPGroup group = web.SiteGroups[groupName];
                        //将当前用户添加到改组中
                        SPUser user = web.EnsureUser("liuwanren");
                        //不要将系统用户往组里添加,是显示不出来的
                        group.Users.Add(user.LoginName, user.Email, user.Name, user.Notes);
                        group.Update();
                        //基于这个组定义一个角色
                        SPRoleAssignment assignment = new SPRoleAssignment(group);
                        //创建一个权限级别
                        SPRoleDefinition definition = web.RoleDefinitions.GetByType(SPRoleType.Administrator);
                        //给角色绑定一个权限
                        assignment.RoleDefinitionBindings.Add(definition);
                        //将该角色添加到web的角色集合中
                        web.RoleAssignments.Add(assignment);
                        web.Update();
                        web.AllowUnsafeUpdates = false;
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "result", "alert('" + "创建成功" + "');", true);
                    }
                }
            });
        }

 (2)代码删除组

protected void DeleteGroup_Click(object sender, EventArgs e)
        {
            string groupName = this.groupTitle.Text;
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        foreach (SPGroup group in web.SiteGroups)
                        {
                            if (group.Name.Equals(groupName))
                            {
                                web.SiteGroups.Remove(group.Name);
                                break;
                            }
                        }
                    }
                }
            });
            ScriptManager.RegisterStartupScript(this, this.GetType(), "result", "alert('" + "删除成功" + "');", true);
        }

 (3)获取组并从组中移除用户

protected void GetGroup_Click(object sender, EventArgs e)
        {
            string groupName = this.groupTitle.Text;
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        foreach (SPGroup group in web.SiteGroups)
                        {
                            if (group.Name.Equals(groupName))
                            {
                                if (group.Users.Count > 0)
                                {
                                    foreach (SPUser user in group.Users)
                                    {
                                        group.Users.Remove(user.LoginName);
                                    }
                                }
                                break;
                            }
                        }
                    }
                }
            });
            ScriptManager.RegisterStartupScript(this, this.GetType(), "result", "alert('" + "获取并移除用户成功" + "');", true);
        }

 (4)获取组,判断组中是否存在某用户。

  做完这个Demo,让我看到到了我这个初级程序员和同事这个高级程序员(5年工作经验)之间的差别所在。

  先看我的代码:

protected void InGroup_Click(object sender, EventArgs e)
        {
            string groupName = this.groupTitle.Text;
            string userLoginName = this.userLoginName.Text;
            string inGroup = "用户在组中";
            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(SPContext.Current.Web.Url))
                {
                    using (SPWeb web = site.OpenWeb())
                    {

                        SPUser user = web.EnsureUser(userLoginName);
                        foreach (SPGroup group in user.Groups)
                        {
                            if (group.Name.Equals(groupName))
                            {
                                inGroup = "用户存在组中";
                            }
                            else
                            {
                                inGroup = "用户不存在组中";
                            }
                        }

                    }
                }
            });
            ScriptManager.RegisterStartupScript(this, this.GetType(), "result", "alert('" + inGroup + "');", true);
        }

 同事的代码

public static class SPUserExtension
    {
        public static bool InGroup(this SPUser user, SPGroup group)
        {
            return user.Groups.Cast<SPGroup>()
              .Any(g => g.ID == group.ID);
            
            
        }
    }

 哎,虽然都实现了同样的效果,但是一看这代码立马就显示出了一个程序员水平的高低。这扩展方法、泛型啥的我也都懂。水平在这儿摆着,即使遇到新功能,想到的也只是用最普通的解决办法解决问题。想不到最直接有效的方法。

继续努力ing...

原文地址:https://www.cnblogs.com/wanren/p/3652811.html