我的项目的要求是这样的:

在上面,有将管理员,他们将有所有d访问,第一级

根据管理员,将有部门首长,他将有所有d访问,除了创造部门负责人

在部门负责,没有将其他成员,他们将管理其分配给新闻部明智的数据。

现在,所有不同部门的首长将拥有自己的信息和成员以及所有部门负责人/成员将有机会获得以自己特定记录,其他正在进入/管理。

现在,Cake的ACL分,我可以划分角色和他们的访问水平,但所有部门首长可以请参阅其他部门负责人的信息,因为它们将具有相同级别的访问,以及所有其他成员可以看到的其他成员的信息上的差异的部门,因为它们将具有相同级别的访问。

我的项目的复杂性的是,他们应该是可见的,只有分配给他们或者创建信息/数据,虽然它们具有相同的级别/角色分配的其他人。

任何人都可以给我建议最合适的选择,管理所有这些东西已经提供的插件Cake.

我可以通过自定义的默认ACL的组成部分,但将采取一些更多的时间,超过预期。

任何更好的想法/建议,将不胜感激!

有帮助吗?

解决方案

在我看来,ACL是不可思议的。例如:ACL可以管理的权限,以告诉谁有权访问,以增加/编辑/删除的产品..但这并不能够改变一个查询过滤产品,因此要定义的权限(如"用户部门可以只看到的产品部门一")..好实际上这是一个谎言,ACL可以管理,但这可能不是实际的,因为每次增加一个产品,就必须创建一个应用程序,并设定的权限在AROS_ACOS表,并由于阿罗斯是树形结构,因此它可以很容易地变成一个nigthmare,如果你的计划,以查询数据

我用一个 小组只ACL 控制进入某些网页/行动和做出的规则,如:

  • "部长可以访问的网页 产品清单'和添加或删除/修改 产品"
  • "管理员可以访问 所有网页"
  • "其他用户可以访问 产品清单'和他们可以添加 产品但不是删除"

和我调整一下我的查询,因此连接的用户,因此在控制的产品清单的页面,我愿意做这样的:

  • 如果连接的用户blongs部门的头,然后选择所有产品在哪里 product.department_id=connected_user.department_id
  • 如果连接的用户管理然后选择所有产品

如果你有太多的查询和你不想要做成千上万的如果的句子,您可以创建一个组件,一个行为或者也许 延长 find() 方法在 app_model.这个想法是赶上所有的查询和检查,如果一个模型,用于查询有领域称为"department_id",如果他们这样做,然后添加 model.department_id=connected_user.department_id 条件的查询。

我做了一个网站,可以看出,在多种语文和每种语言都有它自己的用户、数据、记录等等, 还有一管理,可以看到所有的信息..它的工作作伟大用于我=)

祝你好运!

编辑: 行为我用的是:

<?php 
class LocalizableBehavior extends ModelBehavior { 

    /** 
     * Filter query conditions with the correct `type' field condition. 
     */ 
    function beforeFind(&$model, $query) 
    {
        /**
         * Condition for the paginators that uses joins
        */
        if(isset($query['joins']) && !empty($query['joins'])){
            foreach($query['joins'] as $key => $joinTable){
                if(ClassRegistry::init($joinTable['alias'])->hasField('lang')){
                    $query['joins'][$key]['conditions'][] = $joinTable['alias'].".lang = '".$_SESSION['lang']."'";
                }
            }
        }

        /**
         * condition for the normal find queries
        */
        if($model->hasField('lang') && $model->name != "User"){
                $query['conditions'][$model->name.'.lang'] = $_SESSION['lang'];
        }
        return $query;
    }

} 
?>

它真的很简单,我改变的查询,以添加一个条件相匹配的前语言($_SESSION['lang']).在控制我需要做的就是附加的LocalizableBehavior和使用寻找方法如往常一样:

$this->Products->find('all');
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top