2016-08-09 8 views
1

ロールのアクセス許可を作成するときに有効なアクセス許可を設定したくありません。私はチェックボックスの選択を許可するためだけに設定したいと思います。オーチャードCMSで有効な権限を削除する方法

「サイト所有者権限」をチェックすると、自動的にすべての有効チェックボックスが選択されます。私は効果的な選択を選択したくない。

添付の画像を参考にしてください。

役割有効チェックボックスの画像:

enter image description here

私が間違っているかもしれないもの上の任意の提案?ありがとう。

+2

サイト所有者の権限は、最も強力なものです。各設定を細かく制御したい場合は、その許可をチェックしないでください。 – Xceno

+0

実際に私は何もチェックしなかった。私はサイト所有者の許可チェックボックスの選択をチェックします。他の人は私がチェックしなかった。有効なチェックボックスは、サイト所有者の許可に基づいてチェックされています。 –

+0

その理由は、なぜそのサイト所有者のアクセス許可を確認したのですか? –

答えて

1

各モジュールは、それが自分の権限だと効果的な権限が許可の定義に基づいて決定されて定義することができます。

http://docs.orchardproject.net/en/latest/Documentation/Custom-permissions/

オーチャードはそうImpliedBy permissionsと呼ばれるサポートし、また何かを行うことができますAdministatorの役割のようなものがハードコードされています。

私もこの問題に苦労し、私はハードコードさAdministatorの役割の取り扱いを避けるために、カスタム認可イベントハンドラを使用して、それを解決:

public abstract class ExplicitPermissionAuthorizationEventHandler : Orchard.Security.IAuthorizationServiceEventHandler 
{ 
    // public 
    public ExplicitPermissionAuthorizationEventHandler(Orchard.Data.IRepository<Orchard.Roles.Models.UserRolesPartRecord> aUserRolesPartRecords) 
    { 
     mUserRolesPartRecords = aUserRolesPartRecords; 
    } 

    public void Checking(Orchard.Security.CheckAccessContext aContext) {} 
    public void Adjust(Orchard.Security.CheckAccessContext aContext) {} 

    public void Complete(Orchard.Security.CheckAccessContext aContext) 
    { 
     if (aContext.Granted && IsModulePermission(aContext.Permission) && aContext.User != null) 
     { 
     var lIsAdministrator = mUserRolesPartRecords.Fetch(r => r.UserId == aContext.User.ContentItem.Id && r.Role.Name == "Administrator").Any(); 

     if (lIsAdministrator) 
     { 
      // check whether permission is explicitly assigned as Orchard grants all permissions by default when user is in role "Administrator" 

      var lHasPermissionExplicitly = mUserRolesPartRecords.Fetch(r => r.UserId == aContext.User.ContentItem.Id && 
      r.Role.RolesPermissions.Any(p => p.Permission.FeatureName == ModuleName && p.Permission.Name == aContext.Permission.Name)).Any(); 

      if (!lHasPermissionExplicitly) 
      aContext.Granted = false; 
     } 
     } 
    } 

    // protected 
    protected abstract bool IsModulePermission(Orchard.Security.Permissions.Permission aPermission); 
    protected abstract string ModuleName { get; } 

    // private 
    private Orchard.Data.IRepository<Orchard.Roles.Models.UserRolesPartRecord> mUserRolesPartRecords; 
} 

これはあなたの許可ハンドラを使用する方法のアイデアを取得する必要があります。

関連する問題