提升MOSS中用户访问的特权

    当今黑客横行霸道,正因为他们有比常人之不平常的特权本领,“上天下地,无所不能(呵呵,太夸张了!)”也许刚接触MOSS权限的朋友可能会有很多疑问,比如说公司管理员赋予普通员工的权限只是一个查看者而已(只读权限,《这里笔者提下,凡是能够有权向访问站点的用户都具有只读的权限!》)要如何才能提升自己访问的权限!带着这个疑问与笔者一起踏入用户访问权限提升!首先我们的明确MOSS是一个基于角色管理的强大Office系统。细心的朋友应该发觉到站点里的权限分块,具体到用户,站点,站点集,列表{文档《列表条目,文件夹,文件》}

其次应该怎样去提升权限。

最后思考有了权限提升特权有所为和有所不为,为MOSS中的各种权限管理提供一个适合企业发展的管理模式!好了,直接跟笔者步入正题:

1.特权提升是 Windows SharePoint Services 3.0 的一项新功能,使您能够使用更高的特权级别在代码中以编程方式执行操作。

 

2.利用Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(链接至WSS3.0SDK 方法,您可以向在帐户上下文中运行一部分代码的委托提供高于当前用户的特权。(但是以管理员身份执行访问权限的提升时刻得记住在代码中要重新实例化获取SITE WEB对象,假如是以当前上下文获取,执行的还是当前用户的角色权限,就不存在什么权限的提升了

3. 尽管特权提升提供了一种新的用于管理安全性的有效方法,但是应谨慎使用。不应对具有低特权的用户公开直接、不受控制的机制,以避开为他们授予的权限。(这点也就是笔者刚才提到的有所为有所不为)

以下为权限提升的参考代码(下一篇章笔者会介绍上传文档至sharepoint,到时也会用到这块!)

//用户访问权限的提升

//以下代码段需管理员身份才能执行,但我们只要借助 Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges 方法,就可以轻松模拟管理员权限运行!

         Public void Addpepopomition(int id)

{

 SPSecurity.RunWithElevatedPrivileges(delegate()  

               {

                 //此处必须重新实例化一个site对象,如果用当前上下文SPContext获取,依然是当前登入的用户普通权限

                using (SPSite site = new SPSite("http://mosingserver:8080/"))   

                {

                  

                    using (SPWeb web = site.OpenWeb()) //应用site web使用using释放资源

                    {

                        //获得用户选定的列表

                        SPList list = web.Lists["微软产品文档"];   

                        //通过列表项ID获取可以确保该列表项唯一性

                        SPListItem item = list.Items.GetItemById(id);

                        //不继承父类权限

                        if (!item.HasUniqueRoleAssignments)

                        {

                            item.BreakRoleInheritance(false);

                        }

                        //清除该列表条目原有的所有角色权限

                        foreach (SPRoleAssignment roleassignments in item.RoleAssignments)

                        {

                            //表示允许更新site and web

                            site.AllowUnsafeUpdates = true;

                            web.AllowUnsafeUpdates = true;

                            roleassignments.RoleDefinitionBindings.RemoveAll();

                            //记得重新更新下列表条目

                            item.Update();

 

                        }

                        //获取该站点下的指定用户

                        SPUser authorUser = web.AllUsers["mosing""yongfengisvan"];

                        //对用户进行角色分配

                        SPRoleAssignment roleassignment = new SPRoleAssignment(authorUser.LoginName, authorUser.Email, authorUser.Name, authorUser.Notes);

                        //重新进行角色定义,这里笔者给其管理员的角色,(笔者设yongfengisvan的用户为只读权限。)

                        roleassignment.RoleDefinitionBindings.Add(web.RoleDefinitions.GetByType(SPRoleType.Administrator));

                        item.RoleAssignments.Add(roleassignment);

                        item.Update();

                 

                    }

                }

         });

}

这段代码实例,也是下一篇章会用到的,所以具体的还是等下一章节吧!或者参考SDK上的详细信息!

 

 

posted @ 2009-04-11 01:04  萍水相逢  阅读(446)  评论(0编辑  收藏  举报