zoukankan      html  css  js  c++  java
  • 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...

  • 相关阅读:
    Java习惯用法总结
    为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
    Java 20年:转角遇到Go
    史上最全最强SpringMVC详细示例实战教程
    即将改变软件开发的5个Java9新特性
    <一>c++的编程思路
    人生不可破的28个天规
    定时任务
    redis
    mycat分库分表
  • 原文地址:https://www.cnblogs.com/wanren/p/3652811.html
Copyright © 2011-2022 走看看