рдореЗрд░рд╛ рдмрдЯрди рдХрд╣рд╛рдВ рд╣реИ?

тАЬрдореЗрд░рд╛ рдмрдЯрди рдХрд╣рд╛рдБ рд╣реИ? рдпрд╣ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХреНрдпреЛрдВ рд╣реИ? тАЭрдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХрд┐рддрдиреА рдмрд╛рд░ рдЕрдкрдиреЗ рдЙрддреНрдкрд╛рдж рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдпреЗ рд╢рдмреНрдж рд╕реБрди рд╕рдХрддрд╛ рд╣реИ? рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░, рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рд╢рд╛рдпрдж рдЙрддреНрдкрд╛рдж рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред



рдпрд╣рд╛рдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рд╖реНрдХреНрд░рд┐рдп рдмрдЯрди рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ, рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ:



рдирд┐рд╖реНрдХреНрд░рд┐рдп рдореВрдХ рдмрдЯрди

рдпрд╣ рдореМрди, рдЧреИрд░-рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрдпреЛрдВ рд╣реИ рдФрд░ рдХрд┐рди рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдпрд╣рд╛рдБ рдПрдХ "ennobled" рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдирд┐рд╖реНрдХреНрд░рд┐рдп рдмрдЯрди рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ:



рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рдХреНрд░рд┐рдп рдмрдЯрди



рдирдордХ рдХреНрдпрд╛ рд╣реИ, рдЖрдк рдкреВрдЫреЗрдВ? рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпреЗ рдирд┐рдпрдо рдПрдХ рд╕рд╛рде рдмрдЯрди рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реНрдерд┐рддрд┐ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рдХрд╛рд░рдг рдкрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдмрдЯрди рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореИрдВ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред



рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рдпрдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



from rules import _and_, _or_ # The rule def can_user_add_comment(user, topic): return _and_( lambda: (user, тАЬ  тАЭ), lambda: (user.is_status_active(), тАЬ   тАЭ), lambda: _or_( lambda: (user.is_in_admin_group(), тАЬ  тАЭ), lambda: _and_( lambda: (topic.is_status_open(), тАЬ тАЭ), lambda: (user.has_enough_karma_to_add_comment(), тАЬ      тАЭ), lambda: (user.is_below_comments_per_minute_quota(), тАЬ   ,     тАЭ), ), ), )
      
      





рд▓реЙрдЬрд┐рдХрд▓ рдСрдкрд░реЗрд╢рди рдХреНрд▓рд╛рд╕реЗрд╕ рд▓реИрдореНрдмрдбрд╛ рдореЗрдВ рд▓рд┐рдкрдЯреЗ рдСрдкрд░реЗрдВрдб рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛рдиреА рдЧрдгрдирд╛ рдПрдХ "рдЫреЛрдЯреА рдпреЛрдЬрдирд╛" рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _and_



рдкрд╣рд▓реЗ False



рдХреЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рддрд░реНрдХ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, _or_



- рдкрд╣рд▓реЗ True



рд╕реЗ рдкрд╣рд▓реЗред рдкреНрд░рддреНрдпреЗрдХ рдСрдкрд░реЗрдВрдб рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди (рдЯреБрдкрд▓ рдХрд╛ рдкрд╣рд▓рд╛ рддрддреНрд╡) рдФрд░ рд╕рдВрджреЗрд╢ (рдЯреБрдкрд▓ рдХрд╛ рджреВрд╕рд░рд╛ рддрддреНрд╡) рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдорд╛рди рдХреЗ False



рд╣реЛрдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдирд┐рдпрдо (рдСрдкрд░реЗрдВрдб) рдХреЗ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рднрд╛рдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред



рдлрд┐рд░ рдЗрд╕ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдорд╛рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ, рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:



 <% user = get_authenticated_user() granted = can_user_add_comment(user, current_topic) %> <input type=тАЭbuttonтАЭ value=тАЭ тАЭ title=тАЭ${тАЭ тАЭ if granted else unicode(granted)}тАЭ ${тАЬdisabledтАЭ if not granted else тАЬтАЭ} />
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдмреВрд▓рд┐рдпрди рд╕рдВрджрд░реНрдн рдореЗрдВ can_user_add_comment()



рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХреА granted



рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдЯрди рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреА рд╣реИ, рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдореЗрдВ рдпрд╣ рдХрд╛рд░рдг рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдмреВрд▓рд┐рдпрди рд╕рдВрджрд░реНрдн рдореЗрдВ False



рд╣реИред рдмрдЯрди рдХреА рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХрд╛ рдХрд╛рд░рдг рдЗрд╕рдХреЗ title



рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬрдм рдЖрдк рдЗрд╕реЗ рдорд╛рдЙрд╕ рд╕реЗ рдШреБрдорд╛рддреЗ рд╣реИрдВ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрджреЗрд╢ рд╣реА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдирд┐рдпрдо рдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо False



рдирд┐рдХрд▓рд╛ред рд▓реЗрдХрд┐рди рдПрдХ рдкреВрд░реНрдг рд╡реГрдХреНрд╖ рдЬреИрд╕реА рд░рд┐рдкреЛрд░реНрдЯ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдкреВрд░реЗ рд╢рд╛рд╕рди рдХреА рддрд╛рд░реНрдХрд┐рдХ рд╢рд╛рдЦрд╛рдПрдВ False



рд▓реМрдЯреАрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджрд┐рдП рдЧрдП granted.build_report()



рдпрд╛ рджрд┐рдП рдЧрдП granted.build_html_report()



рдХреЙрд▓ рдХрд░реЗрдВред



рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╢рд╕реНрддреНрд░рд╛рдЧрд╛рд░ рдореЗрдВ _and_



, _or_



, _not_



рдФрд░ _true_



рд╕рдВрдЪрд╛рд▓рди рдЙрдкрд▓рдмреНрдз рд╣реИрдВред



рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдЦреЛрдЬ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореБрдЭреЗ рдХреБрдЫ рднреА рд╕рдорд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрдиреА рдкрдбрд╝реАред рдкрд╣рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдЫреЛрдЯреЗ рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реАрдЦрдирд╛ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рдХрд╛рдлреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, рдХрд╛рд░реНрдпред



All Articles