<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>steffenbartsch</title>
	<atom:link href="http://steffenbartsch.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://steffenbartsch.com/blog</link>
	<description>Security, Usability, Rails</description>
	<pubDate>Tue, 28 Oct 2008 20:52:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.3</generator>
	<language>en</language>
			<item>
		<title>Garlic: Plugin Tests against Various Rails Versions</title>
		<link>http://steffenbartsch.com/blog/2008/10/garlic-plugin-tests-against-various-rails-versions/</link>
		<comments>http://steffenbartsch.com/blog/2008/10/garlic-plugin-tests-against-various-rails-versions/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 20:52:16 +0000</pubDate>
		<dc:creator>Steffen Bartsch</dc:creator>
		
		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[declarative_authorization]]></category>

		<guid isPermaLink="false">http://steffenbartsch.com/blog/?p=80</guid>
		<description><![CDATA[With Rails 2.2 around the corner, I decided to implement a scalable testing infrastructure for the declarative_authorization plugin. One great thing to notice at the RailsConf Europe was Ian&#8217;s garlic.  Though only given as a side note in Ian&#8217;s talk on resources_controller, it provides a nice way of keeping your plugin tested against all those [...]]]></description>
			<content:encoded><![CDATA[<p>With <a title="Riding Rails: Rails 2.2 RC1: i18n, thread safety, docs, etag/last-modified, JRuby/1.9 compatibility" href="http://weblog.rubyonrails.com/2008/10/24/rails-2-2-rc1-i18n-thread-safety-docs-etag-last-modified">Rails 2.2 around the corner</a>, I decided to implement a scalable testing infrastructure for the <a href="http://github.com/stffn/declarative_authorization">declarative_authorization</a> plugin. One great thing to notice at the RailsConf Europe was Ian&#8217;s <a href="http://github.com/ianwhite/garlic">garlic</a>.  Though only given as a side note in Ian&#8217;s talk on resources_controller, it provides a nice way of keeping your plugin tested against all those Rails versions.</p>
<p>Very easy to set up.  Only add to your <a title="Rakefile from declarative_authorization at github" href="http://github.com/stffn/declarative_authorization/tree/master/Rakefile">Rakefile</a> a few lines that run garlic:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">directory</span>?<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'garlic'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'garlic/lib/garlic_tasks'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#0000FF; font-weight:bold;">__FILE__</span><span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">'garlic'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
desc <span style="color:#996600;">&quot;clone the garlic repo (for running ci tasks)&quot;</span>
task <span style="color:#ff3333; font-weight:bold;">:get_garlic</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  sh <span style="color:#996600;">&quot;git clone git://github.com/ianwhite/garlic.git garlic&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>And define the tasks that garlic should perform for you.  In the declarative_authorization case, garlic should retrieve the plugin from the current path and take a few Rails versions as targets. For the test run, garlic just needs to run &#8220;rake&#8221;. This is the necessary <a title="garlic_example.rb from declarative_authorization at github" href="http://github.com/stffn/declarative_authorization/tree/master/garlic_example.rb">recipe</a>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;">garlic <span style="color:#9966CC; font-weight:bold;">do</span>
  repo <span style="color:#996600;">'rails'</span>, <span style="color:#ff3333; font-weight:bold;">:url</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'git://github.com/rails/rails'</span>
  repo <span style="color:#996600;">'declarative_authorization'</span>, <span style="color:#ff3333; font-weight:bold;">:path</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#996600;">'.'</span>
&nbsp;
  target <span style="color:#996600;">'edge'</span>
  target <span style="color:#996600;">'2.1-stable'</span>, <span style="color:#ff3333; font-weight:bold;">:branch</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'origin/2-1-stable'</span>
  target <span style="color:#996600;">'2.2.0-RC1'</span>, <span style="color:#ff3333; font-weight:bold;">:tag</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'v2.2.0'</span>
&nbsp;
  all_targets <span style="color:#9966CC; font-weight:bold;">do</span>
    prepare <span style="color:#9966CC; font-weight:bold;">do</span>
      plugin <span style="color:#996600;">'declarative_authorization'</span>, <span style="color:#ff3333; font-weight:bold;">:clone</span> =<span style="color:#006600; font-weight:bold;">&amp;</span>gt; <span style="color:#0000FF; font-weight:bold;">true</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
    run <span style="color:#9966CC; font-weight:bold;">do</span>
      cd <span style="color:#996600;">&quot;vendor/plugins/declarative_authorization&quot;</span> <span style="color:#9966CC; font-weight:bold;">do</span>
        sh <span style="color:#996600;">&quot;rake&quot;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Thus, all that is needed to check my current declarative_authorization branch against all defined Rails versions is</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">rake get_garlic <span style="color: #666666; font-style: italic;"># just once</span>
rake garlic:all</pre></div></div>

<p>Great, all declarative_authorization tests pass on 2.2.0-RC1!</p>

<div class="wp_syntax"><div class="code"><pre class="bash bash" style="font-family:monospace;">All specified targets passed: edge, <span style="color: #000000;">2.1</span>-stable, 2.2.0-RC1</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://steffenbartsch.com/blog/2008/10/garlic-plugin-tests-against-various-rails-versions/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Authorization for 90 Controllers, 200 Models (and Counting&#8230;)</title>
		<link>http://steffenbartsch.com/blog/2008/09/authorization-for-90-controllers-200-models-and-counting/</link>
		<comments>http://steffenbartsch.com/blog/2008/09/authorization-for-90-controllers-200-models-and-counting/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 18:41:27 +0000</pubDate>
		<dc:creator>Steffen Bartsch</dc:creator>
		
		<category><![CDATA[Authorization]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[declarative_authorization]]></category>

		<guid isPermaLink="false">http://steffenbartsch.com/blog/?p=51</guid>
		<description><![CDATA[One of the interesting comments on our RailsConf Europe presentation on declarative_authorization was offered by Timo Hentschel.  He stated that on the Rails CRM project with 90 Controllers and 200 Models that he is working on the declarative_authorization approach was simply not viable.  Projects of this size are currently not the target of [...]]]></description>
			<content:encoded><![CDATA[<p>One of the interesting comments on our RailsConf Europe <a href="http://steffenbartsch.com/blog/2008/09/from-rails-security-to-application-security/" title="RailsConf Europe presentation From Rails Security to Application Security">presentation</a> on <a href="http://github.com/stffn/declarative_authorization">declarative_authorization</a> was offered by Timo Hentschel.  He stated that on the Rails CRM project with 90 Controllers and 200 Models that he is working on the declarative_authorization approach was simply not viable.  Projects of this size are currently not the target of our plugin, though.  Currently, we focus on bringing maintainable authorization into small to medium applications.  Nevertheless, it is interesting to look into Timo&#8217;s points:</p>
<ul>
<li><strong>&#8220;Role definition is for admins not developers&#8221;</strong>: It certainly depends on the project size.  With small to medium apps (our primary target) admins might just be the developers. Still, our future plans include a possible move of the authorization rules to database, enabling a policy editing UI.</li>
<li><strong>&#8220;You&#8217;d need a UI for handling the policy development&#8221;</strong>: This might be true. But without further evaluation, I am not convinced of the superior performance of a UI when compared to a readable, concise policy syntax. Policy files still provide documentation and specification for free. We will look into UIs, especially to facilitate a test-driven policy development approach, though.</li>
<li><strong>&#8220;I can&#8217;t redeploy on every role modification&#8221;</strong>: In practice, engineering an application&#8217;s policy is certainly error prone. Missing permissions will have to be added to roles once taken into production.  Changing roles on a production system isn&#8217;t optimal either, though: role-permission assignments need to be carefully checked for side effects.  Thus, a QA workflow would be desirable, just as provided by a deployment cycle.  I would prefer to handle missing permission assignments just like other software bugs which need to be fixed asap.  Nevertheless, with the planned features (TDD, UI, policy in DB) and an integrated authorization workflow, online role modifications may be feasible.  In our self-service authorization approach we would even like end users to extend their permissions on their own, on a limited scope and in some environments.</li>
<li><strong>&#8220;With 90 Controllers, the authorization policy will become unmanageably long&#8221;</strong>: This is certainly true with the current syntax.  On the one hand, we will distribute rules to multiple files in order to group similar aspects.  Also, currently one context is used per model.  A hierarchy of contexts is planned to cut the number of specific rules and thus ease policy development and maintainability.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://steffenbartsch.com/blog/2008/09/authorization-for-90-controllers-200-models-and-counting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>From Rails Security to Application Security</title>
		<link>http://steffenbartsch.com/blog/2008/09/from-rails-security-to-application-security/</link>
		<comments>http://steffenbartsch.com/blog/2008/09/from-rails-security-to-application-security/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 13:48:39 +0000</pubDate>
		<dc:creator>Steffen Bartsch</dc:creator>
		
		<category><![CDATA[Authorization]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[declarative_authorization]]></category>

		<guid isPermaLink="false">http://steffenbartsch.com/blog/?p=28</guid>
		<description><![CDATA[I&#8217;m in Berlin for RailsConf Europe currently where I&#8217;m talking together with Carsten Bormann about implementing application security in Agile development with Rails and announcing declarative_authorization.
Here is our presentation (will only really display nicely on Firefox 3, though, sorry; full window view):

]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m in Berlin for RailsConf Europe currently where I&#8217;m talking together with Carsten Bormann about implementing application security in Agile development with Rails and announcing <a href="http://steffenbartsch.com/blog/2008/09/delclarative-authorization/">declarative_authorization</a>.</p>
<p>Here is our presentation (will only really display nicely on Firefox 3, though, sorry; <a href="http://www.tzi.org/~sbartsch/slides/railsconfeurope-2008/railsconfeurope-2008.html">full window view</a>):</p>
<p><iframe src="http://www.tzi.org/~sbartsch/slides/railsconfeurope-2008/railsconfeurope-2008.html" style="width:36em;height:27em"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://steffenbartsch.com/blog/2008/09/from-rails-security-to-application-security/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Declarative Authorization</title>
		<link>http://steffenbartsch.com/blog/2008/09/delclarative-authorization/</link>
		<comments>http://steffenbartsch.com/blog/2008/09/delclarative-authorization/#comments</comments>
		<pubDate>Thu, 04 Sep 2008 10:07:38 +0000</pubDate>
		<dc:creator>Steffen Bartsch</dc:creator>
		
		<category><![CDATA[Authorization]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<category><![CDATA[declarative_authorization]]></category>

		<guid isPermaLink="false">http://steffenbartsch.com/blog/?p=26</guid>
		<description><![CDATA[Having looked through quite a few existing Rails authorization plugins, we decided, we were in need of a different approach.  Mainly, it was the missing separation of authorization logic from business logic in the evaluated plugins that caused us to implement a new plugin, declarative_authorization.
In our declarative approach, authorization rules are grouped in a policy [...]]]></description>
			<content:encoded><![CDATA[<p>Having looked through quite a few existing <a title="Rails Authorization Plugins" href="http://steffenbartsch.com/blog/2008/08/rails-authorization-plugins/">Rails authorization plugins</a>, we decided, we were in need of a different approach.  Mainly, it was the missing separation of authorization logic from business logic in the evaluated plugins that caused us to implement a new plugin, <a href="http://github.com/stffn/declarative_authorization">declarative_authorization</a>.</p>
<p>In our declarative approach, authorization rules are grouped in a policy file, while only privileges are used inside program code to enforce restrictions. We developed for flexibility and simplicity, requiring only very simple statements in rules and program code. So instead of</p>
<pre>
<span class="PreProc">class</span> <span class="Type">ConferenceController</span> &lt; <span class="Type">ApplicationController</span>
  access_control <span class="Constant">:DEFAULT</span> =&gt; [<span class="Constant">:admin</span>],
    [<span class="Constant">:index</span>, <span class="Constant">:show</span>]  =&gt; [...],
    [<span class="Constant">:edit</span>, <span class="Constant">:update</span>] =&gt; [<span class="Constant">:admin</span>, <span class="Constant">:conference_organizer</span>]
<span class="PreProc">end</span>

cond = permit?([<span class="Constant">:admin</span>, <span class="Constant">:conference_organizer</span>]) ?
           {} : {<span class="Constant">:published</span> =&gt; <span class="Constant">true</span>}
<span class="Type">Conference</span>.find(<span class="Constant">:all</span>, <span class="Constant">:conditions</span> =&gt; cond)

<span class="Special">&lt;%</span> restrict_to [<span class="Constant">:admin</span>, <span class="Constant">:conference_organizer</span>] <span class="Statement">do</span> <span class="Special">%&gt;</span>
  <span class="Special">&lt;%=</span> link_to <span class="Special">'</span><span class="Constant">Edit</span><span class="Special">'</span>, edit_conference_path(conference) <span class="Special">%&gt;</span>
<span class="Special">&lt;%</span> <span class="Statement">end</span> <span class="Special">%&gt;</span>
</pre>
<p>with all the authorization logic interweaved with your code, you only need this</p>
<pre>
<span class="PreProc">class</span> <span class="Type">ConferencesController</span> &lt; <span class="Type">ApplicationController</span>
  filter_access_to <span class="Constant">:all</span>

  <span class="PreProc">def</span> <span class="Identifier">index</span>
    <span class="Identifier">@conferences</span> = <span class="Type">Conference</span>.with_permissions_to(<span class="Constant">:read</span>)
  <span class="PreProc">end</span>
<span class="PreProc">end</span>

<span class="Special">&lt;%=</span> link_to <span class="Special">'</span><span class="Constant">Edit</span><span class="Special">'</span>, edit_conference_path(conference)
            <span class="Statement">if</span> permitted_to? <span class="Constant">:edit</span>, conference <span class="Special">%&gt;</span>
</pre>
<p>And, separated in one place the authorization rules:</p>
<pre>
role <span class="Constant">:guest</span> <span class="Statement">do</span>
  has_permission_on <span class="Constant">:conferences</span>, <span class="Constant">:to</span> =&gt; <span class="Constant">:read</span>
<span class="Statement">end</span>

role <span class="Constant">:conference_organizer</span> <span class="Statement">do</span>
  has_permission_on <span class="Constant">:conferences</span>, <span class="Constant">:to</span> =&gt; <span class="Constant">:manage</span>
<span class="Statement">end</span>
</pre>
<p>So, the same rules are used in enforcing authorization in Model, View and Controller. Also, they are used for Query Rewriting to automatically constrain the retrieved records according to the authorization rules.  Thus, you just modify the rules on authorization requirement changes and you can also use the rules to talk to business owners of Agile projects.</p>
<p>For additional information and more examples, refer to the <a title="declarative_authorization documentation" href="http://www.tzi.org/~sbartsch/declarative_authorization/0.1/">README and the rdoc documentation</a>. Currently, we are using the plugin for an application with fairly complex authorization and it will be taking into production in the next iteration. So, look into it if you have authorization concerns in your application, it&#8217;s released under MIT license.</p>
]]></content:encoded>
			<wfw:commentRss>http://steffenbartsch.com/blog/2008/09/delclarative-authorization/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rails Authorization Plugins</title>
		<link>http://steffenbartsch.com/blog/2008/08/rails-authorization-plugins/</link>
		<comments>http://steffenbartsch.com/blog/2008/08/rails-authorization-plugins/#comments</comments>
		<pubDate>Thu, 14 Aug 2008 11:28:51 +0000</pubDate>
		<dc:creator>Steffen Bartsch</dc:creator>
		
		<category><![CDATA[Authorization]]></category>

		<category><![CDATA[Ruby on Rails]]></category>

		<guid isPermaLink="false">http://stffn.wordpress.com/?p=11</guid>
		<description><![CDATA[There seems to be a consensus to choose restful_authentication as the Rails way of securing the identity of users, at least with local user databases (in contrast to e.g. OpenID authentication). For authorization, i.e. restricting the access rights of users, the situation is different: there are lots of alternatives. This is probably due to the [...]]]></description>
			<content:encoded><![CDATA[<p>There seems to be a consensus to choose <a title="Restful Authentication Generator" href="http://github.com/technoweenie/restful-authentication/wikis">restful_authentication</a> as the Rails way of securing the identity of users, at least with local user databases (in contrast to e.g. <a title="Agile Web Development - Plugins - Open Id Authentication" href="http://agilewebdevelopment.com/plugins/openidauthentication">OpenID authentication</a>). For authorization, i.e. restricting the access rights of users, the situation is different: there are lots of alternatives. This is probably due to the varying requirements that projects have in the case of authorization. While there are <a title="Rails Authentication, Authorization and Access Control plugins" href="http://github.com/technoweenie/restful-authentication/wikis/rails-plugins">lists</a> <a title="Security Plugins" href="http://agilewebdevelopment.com/plugins/category/1">and</a> <a title="Authorization in Rails" href="http://www.vaporbase.com/postings/Authorization_in_Rails">surveys</a> of Rails authorization plugins, I was missing an overview that could help in the decision making process of choosing the right plugin for specific requirements.</p>
<p>Here, I tried to examine each plugin according to a few aspects.</p>
<ul>
<li>Access control may be enforced on different layers, in the model, for controller actions and in views.</li>
<li>Most plugins have some user and role concept for restricting access. <em>Authorization constraints</em> allow more fine-grained decisions, though, by defining conditions that need to be met, probably on a context object, in order to grant access.</li>
<li>It is common to define access rules through Access Control Lists (ACL) whereby an object has a list of users or roles that are allowed to operate on the object. ACLs may increase authorization maintenance as new users or roles need to be added at multiple places. In contrast, <em>Privileges</em>, as known from RBAC, are a further abstraction. Thus, users or roles may possess privileges, which are, on the other hand, assigned as a requirement to operations on the objects.</li>
<li>Simplicity helps so that it is a common rule to use the least complex solution possible for a given task. While it is difficult to evaluate <em>complexity</em> without working in-depth with a authorization plugin, I still tried to give a rough estimate of each plugins complexity from an application developer point of view.</li>
</ul>
<p>A table of the evaluated authorization plugins, roughly sorted by activity:</p>
<table border="0">
<thead>
<tr>
<th>Restrictions for</th>
<th>Model</th>
<th>Controller<br />
action</th>
<th>View</th>
<th>Authorization<br />
constraints</th>
<th>Privileges</th>
<th>Complexity</th>
<th>Last<br />
activity</th>
</tr>
</thead>
<tbody>
<tr>
<th><a href="http://www.writertopia.com/developers/authorization">Authorization</a></th>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>medium</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">Restrictions based on pseudo natural language sentences; decisions based on role ACLs on models or model instances</td>
</tr>
<tr>
<th><a href="http://github.com/stffn/declarative_authorization/wikis">declarative_authorization</a></th>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>medium</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">Declarative approach: separation of authorization logic from program code for maintainability and as basis for discussions with domain experts (disclaimer: I am the author of this plugin)</td>
</tr>
<tr>
<th><a href="http://github.com/bilson/padlock_authorization">Padlock Authorization</a></th>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>medium</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">Allows for objects to have roles according to specific users.</td>
</tr>
<tr>
<th><a href="http://github.com/mleventi/acts_as_authorizable/tree/master">ActsAsAuthorizable</a></th>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>medium</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">Restrictions based on pseudo natural language sentences; decisions based on role ACLs on models or model instances</td>
</tr>
<tr>
<th><a href="http://github.com/NoamB/acts_as_permissible/wikis">ActsAsPermissible</a></th>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>medium</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">Provides the basic necessity of authorization: the model methods for assigning permissions and roles to users and retrieving the merged permissions.</td>
</tr>
<tr>
<th><a href="http://base-auth.googlecode.com/svn/trunk/README">base_auth</a></th>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>simple</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">User object-based restrictions on controller actions and views</td>
</tr>
<tr>
<th><a href="http://github.com/blangenfeld/acts_as_checkpoint/tree/master">acts_as_checkpoint</a></th>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>simple</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">Role-based restrictions on controller actions; simple model restrictions through methods on models, employing associations</td>
</tr>
<tr>
<th><a href="http://code.google.com/p/rolerequirement/">rolerequirement</a></th>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>simple</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">Role-based ACLs for restrictions on controller actions</td>
</tr>
<tr>
<th><a href="http://github.com/mdarby/restful_acl/wikis/">RESTful_ACL</a></th>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>simple</td>
<td>recently</td>
</tr>
<tr>
<td colspan="8">Restrictions based on permission methods on models for CRUD operations; no role concept built in; seems to be restricted to CRUD controller actions</td>
<td></td>
</tr>
<tr>
<th><a href="http://opensvn.csie.org/ezra/rails/plugins/dev/acl_system2/">acl_system2</a></th>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>simple</td>
<td>2007</td>
</tr>
<tr>
<td colspan="8">Role-based ACLs for restrictions on controller actions and in views; similar: <a href="http://opensvn.csie.org/mabs29/plugins/simple_access_control/">Simple Access Control</a></td>
</tr>
<tr>
<th><a href="http://active-rbac.rubyforge.org/">ActiveRbac</a></th>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>medium</td>
<td>2007</td>
</tr>
<tr>
<td colspan="8">Implements only the queries on model instances for access rights</td>
</tr>
<tr>
<th><a href="http://opensvn.csie.org/tobionrails/plugins/access_control/README">access_control</a></th>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>No</td>
<td>simple</td>
<td>2007</td>
</tr>
<tr>
<td colspan="8">Simple controller action restrictions based on Unix-style rwx ACLs</td>
</tr>
<tr>
<th><a href="http://svn.rails-engines.org/plugins/user_engine/README">UserEngine</a></th>
<td>No</td>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>medium</td>
<td>2006</td>
</tr>
<tr>
<td colspan="8">Controller/action-based privileges assigned to roles for filtering access to controller actions</td>
</tr>
<tr>
<th><a href="http://activeacl.rubyforge.org/">ActiveAcl</a></th>
<td>Yes</td>
<td>No</td>
<td>No</td>
<td>Yes</td>
<td>Yes</td>
<td>high</td>
<td>2006</td>
</tr>
<tr>
<td colspan="8">Complex database design to allow arbitrary user - role - privilege - object relations</td>
</tr>
</tbody>
</table>
<p>Let me know if I missed important aspects of those plugins or other plugins that you like.</p>
]]></content:encoded>
			<wfw:commentRss>http://steffenbartsch.com/blog/2008/08/rails-authorization-plugins/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Authorization in Small and Medium Enterprises</title>
		<link>http://steffenbartsch.com/blog/2008/06/authorization-in-small-and-medium-enterprises/</link>
		<comments>http://steffenbartsch.com/blog/2008/06/authorization-in-small-and-medium-enterprises/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 16:05:56 +0000</pubDate>
		<dc:creator>Steffen Bartsch</dc:creator>
		
		<category><![CDATA[Academical]]></category>

		<category><![CDATA[Authorization]]></category>

		<guid isPermaLink="false">http://stffn.wordpress.com/?p=13</guid>
		<description><![CDATA[Modeling authorization for workflows in Small and Medium Enterprises (SME) differs from the approach taken in large corporations. The latter employ heavy workflow management systems that are deployed by help of immense consulting resources. By contrast, typical SME need to implement fairly straight-forward workflows while preserving a good deal of flexibility that they are used [...]]]></description>
			<content:encoded><![CDATA[<p>Modeling authorization for workflows in Small and Medium Enterprises (SME) differs from the approach taken in large corporations. The latter employ heavy workflow management systems that are deployed by help of immense consulting resources. By contrast, typical SME need to implement fairly straight-forward workflows while preserving a good deal of flexibility that they are used to from the established informal workflows such as passing around spreadsheets.</p>
<p>From our experience in working with an SME to implement their workflows in a web application, modeling the authorization is a crucial factor. While information security is welcomed by the management, measures need to interfere as little as possible with the daily work. Also, domain experts tend to describe ideal workflows, which is sometimes called <a title="Process Confabulation" href="http://kswenson.wordpress.com/2008/05/25/process-confabulation/">Process Confabulation</a>. Frequent exceptions may be unknown to developers until late in the development cycle, despite user tests.</p>
<p>Therefore, we propose a new approach to access control, allowing users to decide when to extend their previously defined privileges in a controled manner. Thus, the effect of inacurate definition of process and authorization models is mitigated. This concept of &#8220;self-service&#8221; is described in detail in the German paper that I wrote together with <a href="http://www.tzi.org/~cabo">Carsten Bormann</a>, &#8220;<a href="http://www.tzi.org/~sbartsch/papers/dach2008-paper.pdf">Berechtigungsmodellierung im Geschäftsprozessmanagement von KMU</a>&#8221; and presented at the <a href="http://www.syssec.at/dachsecurity2008/">DACH Security</a> conference in Berlin.</p>
]]></content:encoded>
			<wfw:commentRss>http://steffenbartsch.com/blog/2008/06/authorization-in-small-and-medium-enterprises/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Network Service Map</title>
		<link>http://steffenbartsch.com/blog/2006/10/network-service-map/</link>
		<comments>http://steffenbartsch.com/blog/2006/10/network-service-map/#comments</comments>
		<pubDate>Mon, 30 Oct 2006 15:47:39 +0000</pubDate>
		<dc:creator>Steffen Bartsch</dc:creator>
		
		<category><![CDATA[Diploma thesis]]></category>

		<guid isPermaLink="false">http://stffn.wordpress.com/2006/10/30/network-service-map/</guid>
		<description><![CDATA[&#8230;so der Arbeitstitel für meine Diplomarbeit. Es geht um das Verteilen von Informationen über vorhandene Internetzugänge für mobile Nutzer. Da tut sich ja gerade eine Menge, und WLAN-Hotspots werden demnächst um weitere Zugangstechniken ergänzt. Wir stellen uns die Zugangsdienste auf einer Karte dargestellt vor, eben als Service Map.
Nachdem ich gut ein halbes Jahr mal mehr [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;so der Arbeitstitel für meine Diplomarbeit. Es geht um das Verteilen von Informationen über vorhandene Internetzugänge für mobile Nutzer. Da tut sich ja gerade eine Menge, und WLAN-Hotspots werden demnächst um weitere Zugangstechniken ergänzt. Wir stellen uns die Zugangsdienste auf einer Karte dargestellt vor, eben als <a href="http://www.tzi.de/~dku/pub/mdm2006-kutscher-ott.pdf" title="Service Maps for Heterogeneous Network Environments">Service Map</a>.</p>
<p>Nachdem ich gut ein halbes Jahr mal mehr mal weniger Intensiv (nebenbei lief noch unser <a href="http://clip.informatik.uni-bremen.de/" title="Projekt CLiP">studentisches Projekt</a>) am Thema gebastelt habe, gab es Freitag die (in der AG) obligatorische Vorstellung im Kolloqium der AG Rechnernetze. Natürlich hatte ich viel zu viel auf meinen <a href="http://stffn.files.wordpress.com/2006/10/kolloq-1.pdf" title="Kolloquiumsfolien">Folien</a>, als dass es in Ruhe in die 20 Minuten gepasst hätte. Zum Thema Business Case gab es trotzdem sehr interessantes Feedback, hier fehlten einfach noch ein paar wichtige potentielle Mitspieler am Markt.</p>
]]></content:encoded>
			<wfw:commentRss>http://steffenbartsch.com/blog/2006/10/network-service-map/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
