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...

SharePoint2013代码操作权限组的几个Demo的更多相关文章

  1. 开发环境入门 linux基础 (部分) 复制 用户和组操作 权限更改

    复制 用户和组操作 权限更改 CP 复制命令 cp 源文件 目标文件 a) –r(recursive,递归的):递归地复制目录.当复制一个目录时,复制该目录中所有的内容,其中包括子目录的全部内容. b ...

  2. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  3. 用最基本的EF+MVC+JQ+AJAX+bootstrap实现权限管理的简单实例 之登陆和操作权限

    先来一堆关于上篇文章的废话(不喜者点此隐藏) 今天把博客加了个小功能,就是点标题可以隐藏或展示相关内容,做法很傻,就是引用了bootstrap的两个css类和全部的js文件,其实这样的小功能完全应该自 ...

  4. 053医疗项目-模块五:权限设置-将用户操作权限写入Session

    权限管理指的是用户授权,与拦截器没有关系.拦截器只是一个技术,也可以用别的技术来实现的.别人问你权限管理,可不要和人家说什么拦截器.要说用户授权 前一篇文章是把实现了不同的用户呈现不用的菜单.这一篇文 ...

  5. 【转】操作权限不够?教你开启Win7管理员帐户

    在Win7中进行一些设置,或修改某些文件时,经常会弹出当前帐户没有操作权限的提示,即使已经是管理员账户也不行.事实上,出于安全方面的考虑,默认情况下Win7系统的系统管理员Administrator账 ...

  6. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  7. Asp.Net Core 2.0 项目实战(11) 基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

  8. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

    1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证, ...

  9. 第八章| 2. MySQL数据库|数据操作| 权限管理

    1.数据操作 SQL(结构化查询语言),可以操作关系型数据库 通过sql可以创建.修改账号并控制账号权限:  通过sql可以创建.修改数据库.表:  通过sql可以增删改查数据: 可以通过SQL语句中 ...

随机推荐

  1. MyEclipse打包带源码的jar包

    平时开发中,我们喜欢将一些类打包成jar包,然后在别的项目中继续使用,不过由于看不到jar包里面的类的源码了,所以也就无法调试,要想调试,那么就只能通过关联源代码的形式,这样或多或少也有一些不方便,今 ...

  2. Java设计模式—备忘录模式

    个人感觉备忘录模式是一个比较难的设计模式,备忘录模式就是一个对象的备份模式,提供了一种程序数据的备份方法. 定义如下:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以 ...

  3. 基于Apache Curator框架的ZooKeeper使用详解

    一 简介 Apache Curator是一个比较完善的ZooKeeper客户端框架,通过封装的一套高级API 简化了ZooKeeper的操作.通过查看官方文档,可以发现Curator主要解决了三类问题 ...

  4. Android SD卡上文件

    1. 得到存储设备的目录:/SDCARD(一般情况下) SDPATH=Environment.getExternalStorageDirectory()+"/"; 2. 判断SD卡 ...

  5. Node.js 常用 API

    Node.js v6.11.2  Documentation(官方文档) Buffer Prior to the introduction of TypedArray in ECMAScript 20 ...

  6. 毕向东_Java基础视频教程第20天_IO流(11~14)

    第20天-11-IO流(Properties简述) .properties是一种主要在Java相关技术中用来存储应用程序的可配置参数的文件的文件扩展名.它们也可以存储用于国际化和本地化的字符串,这种文 ...

  7. spring boot(4)-html和templates

     静态页面 spring boot项目只有src目录,没有webapp目录,会将静态访问(html/图片等)映射到其自动配置的静态目录,如下 /static /public /resources ...

  8. Jmeter入门(一)————线程组配置

    线程组相当于有多个用户,同时去执行相同的一批次任务.每个线程之间都是隔离的,互不影响的.一个线程的执行过程中,操作的变量,不会影响其他线程的变量值. Delay Thread creation unt ...

  9. CALayer的additive属性解析

    CALayer的additive属性解析 效果: 源码:https://github.com/RylanJIN/ShareOfCoreAnimation // // CAPartAViewContro ...

  10. POP动画[1]

    POP动画[1] pop动画是facebook扩展CoreAnimation的,使用及其方便:) 1:Spring系列的弹簧效果(两个动画kPOPLayerBounds与kPOPLayerCorner ...