标签: declarative-authorization

使用declarative_authorization保护敏感属性

使用declarative_authorization通过角色保护属性有什么好方法?例如,用户可以编辑他的联系信息,但不能编辑他的角色.

我的第一个倾向是为不同的场景创建多个控制器动作.我很快意识到,随着受保护属性数量的增加,这会变得多么笨拙.为用户角色执行此操作是一回事,但我可以想象多个受保护的属性.添加很多控制器操作和路由感觉不对.

我的第二个倾向是围绕特定敏感属性创建权限,然后使用declarative_authorizations提供的View hepers包装表单元素.然而,我的模型和控制器方面有点模糊.建议会很棒.

请使用declarative_authorizations建议通过角色保护属性的最佳方法.

ruby authorization ruby-on-rails declarative-authorization

18
推荐指数
1
解决办法
2578
查看次数

设计是否与declarative_authorization兼容?

只要问每当Rails的设计认证机制与declarative_authorization不冲突时.

也许有人试过这个组合并且可以分享他们的知识,所以我和其他程序员不会浪费时间试图将这些组合起来.

ruby-on-rails declarative-authorization devise

11
推荐指数
1
解决办法
2630
查看次数

declarative_authorization和命名空间

您知道 - declarative_authorization可以控制对命名空间资源的访问吗?我尝试过类似的东西

has_permission_on [:admin, :users], :to => [:index, :show, :new, :create, :edit, :update, :destroy, :search]
Run Code Online (Sandbox Code Playgroud)

但它不起作用:(任何想法?

ruby-on-rails declarative-authorization

8
推荐指数
1
解决办法
1051
查看次数

声明性授权的if_attribute

我有这样的多对多关系:用户通过附属关系拥有多个组织,反之亦然.

我正在使用声明性组织,我只希望用户编辑特定组织(如果他是附属的)并且affiliation的affiliationtype属性是特定值.

因此,从属关系有3列,user_id,organization_id和affiliationtype_id

我可以:

o = Organization.find(:first)
o.affiliatons[0].user and get the user
Run Code Online (Sandbox Code Playgroud)

现在我想这样做:

has_permission_on [:organizations], :to => :edit do
  if_attribute (...)
end
Run Code Online (Sandbox Code Playgroud)

if_attribute应该查看当前用户是否为organization.affiliation [?].user以及organization.affiliation [?].affiliationtype_id ="3"

我希望这是语法问题......我真的需要让它工作.

ruby-on-rails declarative-authorization

7
推荐指数
1
解决办法
2123
查看次数

Ruby:Declarative_authorization多态关联

我有两个模型(项目和主题).它们都归第三个模型所有,具有has_many关联的用户(用户拥有许多主题和项目).项目和主题都具有多种:图像.

Image模型是一个多态关联,因此该表的列为imageable_id和imageable_type.如果我同时拥有ID为1的Item和ID为1的Theme,则该表将如下所示

id    imageable_id    imageable_type
------------------------------------
1     1               Item
2     1               Theme
Run Code Online (Sandbox Code Playgroud)

我正在使用declarative_authorization来重写我的数据库的SQL查询,以防止用户访问其帐户之外的项目.我想编写一个授权规则,允许用户只有在他们可以阅读他们拥有的项目时才能阅读图像.我似乎无法获得正确的语法(也许它不受支持):

has_permission_on [:images], :to => [:manage], :join_as => :and do
  if_attribute :imageable => is { "Item" }
  if_permitted_to :manage, :items # Somehow I need to tell declarative_auth to imageable_id is an item_id in this case.
end
Run Code Online (Sandbox Code Playgroud)

然后我会有另一个模仿上述但主题的规则:

has_permission_on [:images], :to => [:manage], :join_as => :and do
  if_attribute :imageable => is { "Theme" }
  if_permitted_to :manage, :themes # Somehow I need to tell declarative_auth to imageable_id is a theme_id …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails polymorphic-associations declarative-authorization

7
推荐指数
1
解决办法
423
查看次数

声明性授权和if_attribute不起作用

我和Victor Martin几乎有同样的问题(你可以看到这里提出的问题).

我已经获得声明性授权,可用于几乎所有不涉及使用条件的内容.例如

has_permission_on :users, :to => [:edit, :update, :destroy] do
if_attribute :user => is { current_user }
end
Run Code Online (Sandbox Code Playgroud)

声明授权是否有任何常见的陷阱?我正在使用authlogic,我怀疑应用程序控制器中的'current_user'方法可能是问题的根源.

conditional authorization ruby-on-rails authlogic declarative-authorization

5
推荐指数
1
解决办法
1275
查看次数

Rails:未定义的方法'to_sym'

我在部署的Rails 2.3.5应用程序中遇到以下错误:

NoMethodError(nil的未定义方法`to_sym':NilClass):

我使用Sqlite的应用程序的本地测试安装没有得到错误,但我部署的应用程序运行Mysql.两者之间的唯一区别是我在本地计算机上运行Ruby 1.8.7,在部署服务器上运行1.8.6.

我已经包含了User.rb中的代码和下面的错误日志.我在声明授权和嵌入式授权Railscast之后进行了设置.

任何帮助将不胜感激!

编辑:这是application_controller的代码,我使用before_filter设置current_user:

class ApplicationController < ActionController::Base
  helper :all
  helper_method :current_user_session, :current_user 
  before_filter :set_current_user

  protected 

  def set_current_user
    Authorization.current_user = current_user
  end

  def current_user_session  
    return @current_user_session if defined?(@current_user_session)  
    @current_user_session = UserSession.find  
  end  

  def current_user  
    @current_user = current_user_session && current_user_session.record  
  end
end
Run Code Online (Sandbox Code Playgroud)

-

User.rb:

class User < ActiveRecord::Base
  acts_as_authentic 

  has_many :products
  has_many :transactions

  ROLES = %w[admin dmstaff staff faculty]

  def role_symbols
    [role.to_sym]
  end  

end
Run Code Online (Sandbox Code Playgroud)

错误日志:

NoMethodError (undefined method `to_sym' for nil:NilClass):
  app/models/user.rb:10:in `role_symbols'
  /usr/lib/ruby/gems/1.8/gems/declarative_authorization 0.4/lib/declarative_authorization/authorization.rb:242:in `roles_for'
  /usr/lib/ruby/gems/1.8/gems/declarative_authorization-0.4/lib/declarative_authorization/authorization.rb:296:in …
Run Code Online (Sandbox Code Playgroud)

ruby roles ruby-on-rails declarative-authorization

4
推荐指数
1
解决办法
3万
查看次数

使用具有声明性授权和Authlogic的管理仪表板?

我使用声明授权和Authlogic,现在想要为管理创建一个仪表板.关于ActiveScaffold将概述不同的控制器.

但是,我有一个问题,我不能管理子文件夹app/controllers/admin/admin_controller的"管理员权限".我怎样才能做到这一点?

目前我的Authorization_rules.rb看起来像这样:

authorization do
    role :admin do
      includes :guest
      has_permission_on :admin,     :to => [:index]
    end
end
Run Code Online (Sandbox Code Playgroud)

但这不起作用!有人能帮我吗?谢谢

administration ruby-on-rails authlogic declarative-authorization

3
推荐指数
1
解决办法
717
查看次数

创建后,设置角色

我正在尝试使用after_create将默认用户角色设置为订阅者.但它似乎没有做出任何改变.新用户的角色始终为[""].

用户模型

class User < ActiveRecord::Base

  acts_as_authentic
  after_create :set_sub
  after_create :set_universal
  after_create :set_carrier

  def set_sub
    self.roles << "subscriber"
    #self.roles_mask = 4
  end

  def set_universal
      self.channels << Channel.find(1)
  end

  def set_carrier
    @carrier = Carrier.with_name(self.carrier_name)
    self.carrier<< @carrier
  end

  ROLES = %w[admin  moderator subscriber]

  #Each user can subscribe to many channels
  has_and_belongs_to_many :channels

  #Each user who is a moderator can moderate many channels
  #has_many :channel_mods
  has_and_belongs_to_many :modifies , :class_name => "Channel"

  #Each user can receive many messages
  has_and_belongs_to_many :messages

  #Each user belongs to …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails authlogic declarative-authorization

2
推荐指数
1
解决办法
5325
查看次数

具有许多角色的自定义CodeAccessSecurityAttribute

我正在为我们的应用程序开发一些基于角色的安全性,并且我本质上是想进行自定义的Verison MVC- AuthorizeAttribute但仅限于业务逻辑层,在该层我们不链接到MVC。

我看过了,PrincipalPermissionAttribute但由于密封,似乎没有办法自定义它。我只想创建一个自定义版本,可以在不使用多个属性的情况下检查任何角色列表中的成员身份,还可以定义在哪里查找角色成员身份。

.Net中缺少类似的内容吗?还是有人在不重新实现ASP.Net的AuthorizeAttribute / RoleProvider / etc的情况下对此有一些见识?

编辑

我目前正在运行命令式版本,但我宁愿使用声明式属性版本,因为在方法/类上方更容易看到它。

现在,我在业务层的抽象基类中具有以下内容:

protected void EnsureEditorLevelAccess()
{
    var allowedRoles = new[]
                            {
                                Roles.Administrator,
                                Roles.Editor,
                            };

    var roles = GetAccountRoles(GetCurrentUsername());

    if (roles.Any(role => allowedRoles.Contains(role)))
    {
        return;
    }

    throw new SecurityException("You do not have sufficient privileges for this operation.");
}
Run Code Online (Sandbox Code Playgroud)

我喜欢使用Roles.Administratoretc,因为角色名称很丑陋(基于Active Directory组...),所以我考虑将这些详细信息包装在自定义属性的构造函数中,我可以将其放到类/方法之上。

GetAccountRoles 只是可注入角色提供程序属性的外观,我可以将其设置为使用AD或使用数据库的测试版本。

我可以继承子类Attribute,但不确定如何启动安全检查。

.net c# code-access-security security-roles declarative-authorization

2
推荐指数
1
解决办法
4423
查看次数

使用角色掩码查找具有特定角色的所有用户

我一直在当前项目中使用位掩码来跟踪用户角色,但现在我需要能够为所有具有特定角色的用户执行查找.

我的角色设置如下:

  ROLES = %w[admin editor moderator contributor]

  def roles
    ROLES.reject do |r|
      ((roles_mask || 0) & 2**ROLES.index(r)).zero?
    end
  end

  def roles=(roles)
    self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum
  end

  def role_symbols
    roles.map(&:to_sym)
  end
Run Code Online (Sandbox Code Playgroud)

我可以找到具有完全相同位图的所有用户,但不知道如何提取一个特定角色,在这种情况下,所有用户都具有"编辑器"角色.

ruby ruby-on-rails bitmap declarative-authorization ruby-on-rails-3

1
推荐指数
1
解决办法
2558
查看次数

对于我选择的授权插件,人们的意见是什么?

我慢慢地,但肯定地把我的第一个rails应用程序(实际上是第一个任何类型的web应用程序 - 我不是真正的程序员)放在一起,是时候设置用户注册/登录系统了.我的应用程序的性质是每个用户将完全与其他用户分开(管理员角色除外).当用户登录时,他们将拥有自己唯一的索引页面,仅查看他们和其他人无法看到或编辑的数据.但是,我稍后可能希望为用户添加一个角色,以便能够查看和编辑其他几个用户的数据(例如,一组用户可能希望允许他们的秘书访问和编辑他们的数据,但他们的秘书不需要任何数据他们自己).

我的计划是使用authlogic创建登录系统和声明权限来控制权限,但在我开始这个相当重要和关键的任务之前,我想我会就这个组合是否适合我设想的任务或者会有更好/更简单/更快/更便宜/更好的选择.

authorization login ruby-on-rails authlogic declarative-authorization

0
推荐指数
1
解决办法
131
查看次数