1,清明节闲来无聊,敲代码吧,不知道敲什么,不敲吧,又好像比较颓废,不思进取。遂把以前项目中别的同事负责的权限模块的代码看一看,做俩个Demo。
(1)代码创建组
| 
       1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
      10 
      11 
      12 
      13 
      14 
      15 
      16 
      17 
      18 
      19 
      20 
      21 
      22 
      23 
      24 
      25 
      26 
      27 
      28 
      29 
      30 
      31 
      32 
      33 
      34 
      35  | 
    
      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)代码删除组
| 
       1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
      10 
      11 
      12 
      13 
      14 
      15 
      16 
      17 
      18 
      19 
      20 
      21 
      22  | 
    
      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)获取组并从组中移除用户
| 
       1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
      10 
      11 
      12 
      13 
      14 
      15 
      16 
      17 
      18 
      19 
      20 
      21 
      22 
      23 
      24 
      25 
      26 
      27 
      28  | 
    
      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年工作经验)之间的差别所在。
先看我的代码:
| 
       1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
      10 
      11 
      12 
      13 
      14 
      15 
      16 
      17 
      18 
      19 
      20 
      21 
      22 
      23 
      24 
      25 
      26 
      27 
      28 
      29 
      30  | 
    
      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);        } | 
同事的代码
| 
       1 
      2 
      3 
      4 
      5 
      6 
      7 
      8 
      9 
      10  | 
    
      public 
static class SPUserExtension    {        public 
static bool InGroup(this 
SPUser user, SPGroup group)        {            return 
user.Groups.Cast<SPGroup>()              .Any(g => g.ID == group.ID);                                  }    } | 
哎,虽然都实现了同样的效果,但是一看这代码立马就显示出了一个程序员水平的高低。这扩展方法、泛型啥的我也都懂。水平在这儿摆着,即使遇到新功能,想到的也只是用最普通的解决办法解决问题。想不到最直接有效的方法。
SharePoint2013代码操作权限组的几个Demo,布布扣,bubuko.com
原文:http://www.cnblogs.com/wanren/p/3652811.html