상속: Zetetic.Chain.ContextBase
예제 #1
0
        public virtual bool OperationPermitted(PamContext context, IPrincipal principal, string operation, object target, bool allowIfNoRule)
        {
            if (this.Catalog == null)
                throw new ApplicationException("Catalog is undefined");

            if (principal == null)
                throw new ArgumentNullException("principal");

            if (operation == null)
                throw new ArgumentNullException("operation");

            var ctx = context ?? new PamContext(principal, operation, target);
            ctx["RawTarget"] = target;

            try
            {
                this.Catalog[operation].Execute(ctx);
            }
            catch (Zetetic.Chain.NoSuchCommandException)
            {
                this.OnResult(ctx, operation, allowIfNoRule, true);
                return allowIfNoRule;
            }

            this.OnResult(ctx, operation, ctx.Permit, false);
            return ctx.Permit;
        }
예제 #2
0
        protected CommandResult AproposResponse(PamContext ctx, bool thisResult)
        {
            logger.Debug("{0}, pam {1}, thisResult {2}, existing-permit {3}",
                this.GetType(), this.PamFlag, thisResult, ctx.Permit);

            switch (this.PamFlag.ToLowerInvariant())
            {
                case "requisite":

                    ctx.Permit = thisResult;
                    
                    if (!ctx.Permit)
                        ctx.MarkDenied();
                    
                    return thisResult ? CommandResult.Continue 
                        : CommandResult.Stop;
                    
                case "required":

                    ctx.Permit = thisResult;

                    if (!ctx.Permit)
                        ctx.MarkDenied();

                    return CommandResult.Continue;

                case "sufficient":

                    if (thisResult)
                        ctx.Permit = true;

                    return thisResult ? CommandResult.Stop
                        : CommandResult.Continue;

                case "optional":

                    return CommandResult.Continue;

                default:
                    throw new ApplicationException("Unknown PamFlag " + this.PamFlag);
            }
        }
예제 #3
0
 protected virtual void OnResult(PamContext context, string operation, bool result, bool isNoActionResult)
 {
     if (isNoActionResult)
         logger.Warn("No command for '{0}'; return default {1}", operation, result);
 }