2009年11月 のアーカイブ

[SharePoint]権限の一覧が欲しい

[SharePoint]権限の一覧が欲しいをはてなブックマークに追加 [SharePoint]権限の一覧が欲しいをdel.icio.usに追加 Yahoo!ブックマークに登録 [SharePoint]権限の一覧が欲しいをGoogle Bookmarksに追加 [SharePoint]権限の一覧が欲しいをtwitterにポスト
2009年11月25日 水曜日

mossrole

SharePointの権限が一覧で欲しい。ということで、サイト、ライブラリ、アイテムで権限の継承を切っているものを出力するコードを書きました。xmlで出力するんですが、Excelで開くように

    webXml.AppendChild(webXml.CreateProcessingInstruction("mso-application", "progid=¥"Excel.Sheet¥""));

こんなコードを入れてみた。SPSiteのインスタンスをnewするところで<your hostname>の部分を適宜変更してみれば使えると思います。

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using System.Xml;
using System.Text.RegularExpressions;

namespace SPPerms
{
    class Program
    {
        static void Main(string[] args)
        {
            Program inst = new Program();
            inst.exec();
        }

        public void exec()
        {
            Regex rgx = new Regex("[\\\\|/|&|:|\\*|?|\"|<|>|\\|]");
            String regexStr;

            SPSite root = new SPSite("<your hostname>");
            SPWebApplication webApp = root.WebApplication;
            SPSiteCollection sites = webApp.Sites;

            foreach( SPSite site in sites ){

                SPWebCollection webs = site.AllWebs;
                foreach (SPWeb web in webs)
                {
                    XmlDocument webXml = new XmlDocument();
                    XmlElement tblElem = createSheet(webXml, web.Title);
                    if (web.HasUniqueRoleAssignments)
                    {
                        SPRoleAssignmentCollection webRoles = web.RoleAssignments;
                        createRow(webRoles, webXml, web.Title, web.Url, tblElem);
                        regexStr = rgx.Replace("site." + web.Title + web.ID.ToString(), ".");
                        webXml.Save(regexStr + ".xml");
                    }
                    SPListCollection lists = web.Lists;
                    foreach (SPList list in lists)
                    {
                        bool isOutput = false;
                        XmlDocument listXml = new XmlDocument();
                        XmlElement listTblElem = createSheet(listXml, web.Title + "." + list.Title);
                        if (list.HasUniqueRoleAssignments)
                        {
                            SPRoleAssignmentCollection listRoles = list.RoleAssignments;
                            createRow(listRoles, listXml, list.Title, "http://" + site.HostName + list.DefaultViewUrl, listTblElem);
                            isOutput = true;
                        }
                        SPListItemCollection items = list.Items;
                        foreach (SPListItem item in items)
                        {
                            if (!item.HasUniqueRoleAssignments) continue;
                            SPRoleAssignmentCollection itemRoles = item.RoleAssignments;
                            createRow(itemRoles, listXml, "" + item.ID, web.Url + "/" + item.Url, listTblElem);
                            isOutput = true;

                        }
                        if (isOutput)
                        {
                            regexStr = rgx.Replace("list." + web.Title + "." + list.Title + list.ID.ToString(), ".");
                            listXml.Save(regexStr + ".xml");
                        }
                    }
                }
            }
        }

        private void createRow( SPRoleAssignmentCollection roles, XmlDocument xmlDoc, String title, String url, XmlElement tblElem ){

            foreach (SPRoleAssignment role in roles)
            {
                SPRoleDefinitionBindingCollection roleBindings = role.RoleDefinitionBindings;

                foreach( SPRoleDefinition roleDef in roleBindings ){
                    XmlElement rowElem = xmlDoc.CreateElement("Row");
                    tblElem.AppendChild(rowElem);
                    rowElem.AppendChild(createCellNode(xmlDoc, title));
                    rowElem.AppendChild(createCellNode(xmlDoc, url ));
                    rowElem.AppendChild(createCellNode(xmlDoc, role.Member.Name));
                    rowElem.AppendChild(createCellNode(xmlDoc, roleDef.Name ));
                }
            }
        }

        private XmlElement createSheet( XmlDocument webXml, String sheetName )
        {
            webXml.AppendChild(webXml.CreateXmlDeclaration("1.0", "UTF-8", null));
            webXml.AppendChild(webXml.CreateProcessingInstruction("mso-application", "progid=\"Excel.Sheet\""));
            XmlElement wbElem = webXml.CreateElement("Workbook");
            wbElem.SetAttribute("xmlns", "urn:schemas-microsoft-com:office:spreadsheet");
            wbElem.SetAttribute("xmlns:ss", "urn:schemas-microsoft-com:office:spreadsheet");
            webXml.AppendChild(wbElem);

            XmlElement wsElem = webXml.CreateElement("Worksheet");
            wsElem.SetAttribute("Name", "urn:schemas-microsoft-com:office:spreadsheet", sheetName );
            wbElem.AppendChild(wsElem);

            XmlElement tblElem = webXml.CreateElement("Table");
            wsElem.AppendChild(tblElem);

            XmlElement rowElem = webXml.CreateElement("Row");
            tblElem.AppendChild(rowElem);

            rowElem.AppendChild(createCellNode(webXml, "Title / ID"));
            rowElem.AppendChild(createCellNode(webXml, "URL"));
            rowElem.AppendChild(createCellNode(webXml, "Account"));
            rowElem.AppendChild(createCellNode(webXml, "Name"));
            return tblElem;
        }

        XmlElement createCellNode(XmlDocument xmlDoc, String data )
        {
            XmlElement cellElem = xmlDoc.CreateElement("Cell");
            XmlElement dataElem = xmlDoc.CreateElement("Data");
            dataElem.SetAttribute("Type", "urn:schemas-microsoft-com:office:spreadsheet", "String");
            dataElem.InnerText = data;
            cellElem.AppendChild(dataElem);
            return cellElem;
        }
    }
}

[マンガ]イラストのお仕事その2

[マンガ]イラストのお仕事その2をはてなブックマークに追加 [マンガ]イラストのお仕事その2をdel.icio.usに追加 Yahoo!ブックマークに登録 [マンガ]イラストのお仕事その2をGoogle Bookmarksに追加 [マンガ]イラストのお仕事その2をtwitterにポスト
2009年11月17日 火曜日

maniacsNeta002

イラストのお仕事その2。「(ログを見て)呆然とする管理者」なんだけど、どう表現していいかわかんなかった。顔を見せない方が雰囲気伝わるかな。呆然とはしてないんだよな。

もう何枚か描いてみようか。(下書き↓)
maniacsNeta003

[マンガ]イラストのお仕事

[マンガ]イラストのお仕事をはてなブックマークに追加 [マンガ]イラストのお仕事をdel.icio.usに追加 Yahoo!ブックマークに登録 [マンガ]イラストのお仕事をGoogle Bookmarksに追加 [マンガ]イラストのお仕事をtwitterにポスト
2009年11月16日 月曜日

maniacsneta
イラストのお仕事をいただけそうで。『あたまを抱える管理者』です。

こんなんでいいのだろうか。ComicStudio欲しいな。ヨドバシで見たら、debutが1万円とちょっとだった。